我已经转移到了一个新的webhost,我们已经使用了php 5.1而不是5.2,直到现在我一直在使用它。我还是不知道它是php版本还是配置问题。
现在,大多数(或所有)具有__toString函数的类都转换为“Object ID#”(如在php4中),但在它们都返回正确的值之前。
我该如何解决这个问题?
答案 0 :(得分:4)
显然在PHP 5.2之前,__toString
方法仅在某些情况下被“神奇地”调用(例如echo()
和print()
)。因此,如果您当前正在以直接输出函数之外的“神奇”方式使用__toString()
,它将无法按预期工作。
值得注意的是在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。
所以,这可能取决于你如何调用输出。