使用concatenate时不调用php toString

时间:2011-08-01 06:40:23

标签: php concatenation deprecated tostring

引用此帖子php 5.1.6 magic __toString method

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

1 个答案:

答案 0 :(得分:3)

您是否阅读了PHP documentation中的免责声明?

  

值得注意的是,在PHP 5.2.0之前,__toString方法仅在与echo()或print()直接组合时才被调用。从PHP 5.2.0开始,它在任何字符串上下文中调用(例如在带有%s修饰符的printf()中),但在其他类型的上下文中不调用(例如,使用%d修饰符)。从PHP 5.2.0开始,将没有__toString方法的对象转换为字符串会导致E_RECOVERABLE_ERROR。

由于你不是直接涉及带回声的对象(即你首先进行连接操作),因此不会调用__toString方法。因此,要么升级您的PHP版本,要么显式调用__toString