Это __toString()
метод, который я пытаюсь использовать в классе PHP. Выдает ошибку «Catchable fatal error: Метод Project :: __ toString () должен вернуть строковое значение в …»
Но, насколько я могу судить, все, что я передаю, это строка. Я даже проверил $this->proj_id
с gettype($var)
чтобы подтвердить, что это строка, и это так.
Вот класс проекта …
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 ?!
Он фактически выводит таблицу, ячейки и значения в этих ячейках так, как я хочу, но затем выдает ошибку и прекращает создание остальной части веб-страницы. Я не понимаю
__toString()
должен вернуть строка, а не echo
Это:
public function __toString(){
return "<table>". "<tr><td>".'proj_id: '."</td><td> ". $this->proj_id. " </td><t/r>". "</table><br><br>"}
когда вы вызываете echo для вашего объекта Project, объект преобразуется в строку, которая будет использоваться для вывода. Если вы сами определяете метод __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 выведет ее.
Повторение не единственное использование строки. Возможно, вы хотите сохранить объект в базе данных или поместить его в структуру 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;
}