__toString不输出
__toString does not output
我找到条目 PHP OOP - toString 不工作,但它没有解决我的问题,因为我相信我正在正确调用魔法方法...
这是我的代码:
class Alerts {
public $message;
public $type;
public $output;
public function __construct($message_id)
{
include 'con.php';
$stmt = $conn->prepare(
'SELECT * FROM alerts WHERE id = :message_id');
$stmt->execute(array(':message_id' => $message_id));
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$this->type = $row['type'];
$this->message = $row['message'];
}
}
public function __toString (){
$output ='';
$output .= "<div class='" . $this->type . "'><button class='close' data-dismiss='alert'></button>";
$output .= "<i class='fa fa-check-circle'></i> <strong>";
$output .= $this->message;
$output .= "</strong> </div>";
return $output;
}
}
如果我调用它就有效:
$message_id = 6;
$alert = new Alerts($message_id);
$output ='';
$output .= "<div class='" . $alert->type . "'><button class='close' data-dismiss='alert'></button>";
$output .= "<i class='fa fa-check-circle'></i> <strong>";
$output .= $alert->message;
$output .= "</strong> </div>";
在页面上,但如果我使用:
$message_id = 6;
$alert = new Alerts($message_id);
echo $alert->output;
我是 PHP OOP 的新手,非常感谢您的帮助
来自 the PHP docs:
The __toString()
method allows a class to decide how it will react when it is treated like a string. For example, what echo $obj;
will print. This method must return a string, as otherwise a fatal E_RECOVERABLE_ERROR
level error is emitted.
按照这个逻辑,执行 echo $alert->output;
只会输出在 class 中声明的空白 属性 public $output;
。 public $output
为空且未被修改的两个原因是:
- 您没有在
__toString()
方法的上下文中访问 $this->output
。
当您访问对象的任何方法或 属性 时,__toString()
不会被调用,当您将对象视为字符串时, 仅 被调用。
如果您决定使用 __toString()
,您实际应该做的是:
echo $alert;
我找到条目 PHP OOP - toString 不工作,但它没有解决我的问题,因为我相信我正在正确调用魔法方法...
这是我的代码:
class Alerts {
public $message;
public $type;
public $output;
public function __construct($message_id)
{
include 'con.php';
$stmt = $conn->prepare(
'SELECT * FROM alerts WHERE id = :message_id');
$stmt->execute(array(':message_id' => $message_id));
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$this->type = $row['type'];
$this->message = $row['message'];
}
}
public function __toString (){
$output ='';
$output .= "<div class='" . $this->type . "'><button class='close' data-dismiss='alert'></button>";
$output .= "<i class='fa fa-check-circle'></i> <strong>";
$output .= $this->message;
$output .= "</strong> </div>";
return $output;
}
}
如果我调用它就有效:
$message_id = 6;
$alert = new Alerts($message_id);
$output ='';
$output .= "<div class='" . $alert->type . "'><button class='close' data-dismiss='alert'></button>";
$output .= "<i class='fa fa-check-circle'></i> <strong>";
$output .= $alert->message;
$output .= "</strong> </div>";
在页面上,但如果我使用:
$message_id = 6;
$alert = new Alerts($message_id);
echo $alert->output;
我是 PHP OOP 的新手,非常感谢您的帮助
来自 the PHP docs:
The
__toString()
method allows a class to decide how it will react when it is treated like a string. For example, whatecho $obj;
will print. This method must return a string, as otherwise a fatalE_RECOVERABLE_ERROR
level error is emitted.
按照这个逻辑,执行 echo $alert->output;
只会输出在 class 中声明的空白 属性 public $output;
。 public $output
为空且未被修改的两个原因是:
- 您没有在
__toString()
方法的上下文中访问$this->output
。
当您访问对象的任何方法或 属性 时, __toString()
不会被调用,当您将对象视为字符串时, 仅 被调用。
如果您决定使用 __toString()
,您实际应该做的是:
echo $alert;