oop — ошибка PHP: Class :: __ toString () должен возвращать строковое значение в

Это __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 ?!

Он фактически выводит таблицу, ячейки и значения в этих ячейках так, как я хочу, но затем выдает ошибку и прекращает создание остальной части веб-страницы. Я не понимаю

-1

Решение

__toString() должен вернуть строка, а не echo Это:

public function __toString(){
return "<table>". "<tr><td>".'proj_id: '."</td><td> ". $this->proj_id. " </td><t/r>". "</table><br><br>"}
1

Другие решения

когда вы вызываете 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 выведет ее.

2

Повторение не единственное использование строки. Возможно, вы хотите сохранить объект в базе данных или поместить его в структуру 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;
}
1
По вопросам рекламы [email protected]