Неявное преобразование в строку вместо получения "Object ID # .." - PullRequest
0 голосов
/ 02 июня 2009

Я перешел на новый веб-хостинг, где у нас был php 5.1 вместо 5.2, который я использовал до сих пор. Я до сих пор не понял, проблема ли это в версии php или конфигурации.

В настоящее время большинство (или все) классов, которые имеют функции __toString, преобразуются в «Object ID #» (как в php4), но до того, как все они вернули правильные значения.

Как я могу это исправить?

Ответы [ 2 ]

4 голосов
/ 02 июня 2009

Очевидно, до PHP 5.2 метод __toString вызывался только «магическим образом» при определенных обстоятельствах (например, echo() и print()). Поэтому, если вы в настоящее время используете __toString() «магическим» образом вне функций прямого вывода, он не будет работать должным образом.

Источник

Стоит отметить, что до PHP 5.2.0 метод __toString вызывался только тогда, когда он был напрямую объединен с echo() или print(). С PHP 5.2.0, он вызывается в любом строковом контексте (например, в printf() с %s модификатор), но не в других типах контексты (например, с модификатором %d). Начиная с PHP 5.2.0, преобразование объектов без __toString метода для строки вызовет E_RECOVERABLE_ERROR.

1 голос
/ 02 июня 2009

Некоторые хост-компании (например, 1and1) используют PHP 4.x и 5.x и по умолчанию 4.x. Вам может понадобиться файл .htaccess, который гарантирует, что вы используете правильную версию PHP.

Кроме того, магия __toString () немного отличается от версии 5.2+ в соответствии с документацией :

Стоит отметить, что до PHP 5.2.0 метод __toString вызывался только тогда, когда он напрямую сочетался с echo () или print (). Начиная с PHP 5.2.0, он вызывается в любом строковом контексте (например, в printf () с модификатором% s), но не в контекстах других типов (например, с модификатором% d). Начиная с PHP 5.2.0, преобразование объектов без метода __toString в строку вызовет E_RECOVERABLE_ERROR.

Итак, это может зависеть от того, как вы вызываете вывод.

...