php 5.1.6 magic __toString метод

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

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

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

    Обновление PHP

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

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

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

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

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

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

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

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

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