2011-08-01 3 views
0

ссылка этого поста php 5.1.6 magic __toString methodPHP ToString не вызывается, когда конкатенация используются

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() 

что других методов я должен переопределить получить объект для правильного отображения в контексте конкатенатов строк/etc

В настоящее время я получаю что-то вроде

echo 'Hello ' . $yourObject; 

производит 'Hello Object ID 55';

кто имеет решение в контексте:

  • клиент не хочет, чтобы обновить их версии PHP
  • не брызгать __toString повсюду

?

+2

PHP <5.3 больше не поддерживается. Вам предлагается перейти на более новую версию. – Gordon

+0

@ Gordon пожелаю, чтобы я мог поддержать ваш комментарий еще пару миллионов раз;) – Phil

+0

Зачем это получило голос? это хороший вопрос +1 – Ibu

ответ

3

Вы прочитали отказ от ответственности в PHP documentation?

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

Поскольку вы не непосредственно с участием объекта с эхом (т.е. вы делаете операцию конкатенации первый), метод __toString не дозвонился. Поэтому либо обновите свою версию PHP, либо явно вызовите __toString.

Смежные вопросы