引用此帖子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';
任何人都有以下方面的解决方案:
答案 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
。