隐式转换为字符串而不是获取“对象ID#..”

时间:2009-06-02 18:44:14

标签: php string object casting tostring

我已经转移到了一个新的webhost,我们已经使用了php 5.1而不是5.2,直到现在我一直在使用它。我还是不知道它是php版本还是配置问题。

现在,大多数(或所有)具有__toString函数的类都转换为“Object ID#”(如在php4中),但在它们都返回正确的值之前。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

显然在PHP 5.2之前,__toString方法仅在某些情况下被“神奇地”调用(例如echo()print())。因此,如果您当前正在以直接输出函数之外的“神奇”方式使用__toString(),它将无法按预期工作。

Source

  

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

答案 1 :(得分:1)

某些主机公司(如1and1)同时运行PHP 4.x和5.x,默认为4.x.您可能需要一个.htaccess文件,以确保您使用的是正确版本的PHP。

此外,根据documentation,魔法__toString()与版本5.2+略有不同:

  

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

所以,这可能取决于你如何调用输出。