php 5.1.6 волшебный метод __toString - PullRequest
5 голосов
/ 25 мая 2010

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

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

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

Ответы [ 5 ]

7 голосов
/ 25 мая 2010
class YourClass 
{
    public function __toString()
    {
        return $this->name;
    }
}

PHP <5.2.0 </strong>

$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
3 голосов
/ 25 мая 2010

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

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

2 голосов
/ 01 сентября 2011

Обновление PHP

Я имею дело с той же проблемой, я подозреваю, что лучшим вариантом будет обновить php на рабочем сервере до >= 5.2.0

В будущем (в настоящее время я изучаю этот трудный путь), попробуйте разработать ту же версию, на которую вы развернете.

0 голосов
/ 30 января 2017

Вам необходимо установить sudo apt install php7.0-mbstring Нужно изменить версию PHP согласно вашей.

И после этого не забудьте запустить service apache2 restart

Надеюсь, это поможет.

0 голосов
/ 15 октября 2012

Вы должны явно вызывать магическую функцию php __toString () для версий <5.2. Таким образом, ваш код станет примерно таким: </p>

    public function myname()
    {
       $name = $this->name;
       return $name.__toString(); //for php versions < 5.2,will also work > 5.2
    }

Для версий> 5.2 __toString автоматически вызывается

...