php 5.1.6 волшебства __ toString метод

В codeigniter я пытаюсь использовать этот плагин, который требует, чтобы я реализовал toString метод в своих моделях. Мой toString метод просто делает

public function __toString()
{
    return (string)$this->name;
}

На моей локальной машине с php 5.3 все работает просто великолепно, но на рабочем сервере с php 5.1.6 это показывает "Объект id#48", где значение свойства имени того объекта должно появиться..... Я нашел что-то о проблеме здесь, но я все еще не понимаю... Как я могу зафиксировать это?

5
задан nacho10f 25 May 2010 в 06:09
поделиться

2 ответа

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
7
ответ дан 13 December 2019 в 05:31
поделиться

Цитата из руководства:

Стоит отметить, что до 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, а не в контексте эха или печати.

3
ответ дан 13 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: