PHP错误:Class :: __ toString()必须返回一个字符串值

时间:2017-01-31 18:08:22

标签: php oop tostring

这是我试图在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 ?!

它实际上按照我的意愿输出这些单元格中的表格和单元格和值,但随后给出错误并停止创建网页的其余部分。我不明白。

3 个答案:

答案 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;
  }