В 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
Надеюсь, это поможет.