这是我试图在PHP类中使用的__toString()
方法。它抛出错误“Catchable fatal error:Method Project :: __ toString()必须返回一个字符串值...”
但据我所知,我传递的所有内容都是字符串。我甚至用$this->proj_id
检查gettype($var)
以确认它是一个字符串,它就是。
这是Project类......
class Project {
public $proj_id;
public $proj_num;
public $proj_name;
public function __construct($id, $num, $name){
$this->proj_id = $id;
$this->proj_num = $num;
$this->proj_name = $name;
}
public function __toString(){
echo "<table>";
echo "<tr><td>".'proj_id: '."</td><td> ".$this->proj_id." </td><t/r>";
echo "</table><br><br>";
}
}
这是对象实例化......
$test_obj = new Project('XC2344','HKSTEST','Test Project');
echo $test_obj; //this is where the error shows up - even though it actually outputs the table with the correct value in both cells ?!
它实际上按照我的意愿输出这些单元格中的表格和单元格和值,但随后给出错误并停止创建网页的其余部分。我不明白。
答案 0 :(得分:2)
当您在Project对象上调用echo时,该对象将转换为将用于输出的字符串。如果您自己定义__toString方法,则必须返回必须输出的字符串。不要在__toString方法中立即输出字符串,只需返回它。
public function __toString(){
return "<table>" .
"<tr><td>".'proj_id: '."</td><td> ".$this->proj_id." </td><t/r>" .
"</table><br><br>";
}
所以当你打电话
echo $test_obj;
将调用__toString,你的函数将返回字符串,echo将输出它。
答案 1 :(得分:1)
__toString()
必须返回字符串,而不是echo
:
public function __toString(){
return "<table>"
. "<tr><td>".'proj_id: '."</td><td> ". $this->proj_id. " </td><t/r>"
. "</table><br><br>"
}
答案 2 :(得分:1)
回声不是字符串的唯一用法。您可能希望将对象保存到数据库,或将其放入JSON结构中。
__toString
必须返回字符串,而不是输出内容。
public function __toString(){
$str = "<table>";
$str .= "<tr><td>".'proj_id: '."</td><td> ".$this->proj_id." </td><t/r>";
$str .= "</table><br><br>";
return $str;
}