В codeigniter я пытаюсь использовать этот плагин, который требует, чтобы я реализовал toString метод в своих моделях. Мой toString метод просто делает
public function __toString()
{
return (string)$this->name;
}
На моей локальной машине с php 5.3 все работает просто великолепно, но на рабочем сервере с php 5.1.6 это показывает "Объект id#48", где значение свойства имени того объекта должно появиться..... Я нашел что-то о проблеме здесь, но я все еще не понимаю... Как я могу зафиксировать это?
class YourClass
{
public function __toString()
{
return $this->name;
}
}
PHP < 5.2.0
$yourObject = new YourClass();
echo $yourObject; // this works
printf("%s", $yourObject); // this does not call __toString()
echo 'Hello ' . $yourObject; // this does not call __toString()
echo 'Hello ' . $yourObject->__toString(); // this works
echo (string)$yourObject; // this does not call __toString()
PHP >= 5.2.0
$yourObject = new YourClass();
echo $yourObject; // this works
printf("%s", $yourObject); // this works
echo 'Hello ' . $yourObject; // this works
echo 'Hello ' . $yourObject->__toString(); // this works
echo (string)$yourObject; // this works
Цитата из руководства:
Стоит отметить, что до PHP 5.2.0 метод __toString вызывался только тогда, когда он был напрямую объединен с помощью echo () или print (). Начиная с PHP 5.2.0, он вызывается в любом строковом контексте (например, в printf () с% s модификатор), но не в других типах контексты (например, с модификатором% d). Начиная с PHP 5.2.0, преобразование объектов без метода __toString для строки вызовет E_RECOVERABLE_ERROR.
Думаю, вы вызывали метод __toString вручную, если вы используете его в PHP <5.2, а не в контексте эха или печати.