php toString не вызывается при использовании concatenate - PullRequest
0 голосов
/ 01 августа 2011

ссылка на этот пост php 5.1.6 magic __toString метод

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

PHP <5.2.0 </p>

$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 повсюду

?

1 Ответ

3 голосов
/ 01 августа 2011

Читали ли вы заявление об отказе от ответственности в документации PHP ?

Стоит отметить, что до 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.

...