我已经转移到一个新的虚拟主机,我们有 php 5.1 而不是我到目前为止一直使用的 5.2。我还没弄清楚这是php版本还是配置问题。

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

我怎样才能解决这个问题?

有帮助吗?

解决方案

显然之前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

其他提示

一些托管公司(例如 1and1)同时运行 PHP 4.x 和 5.x,并且默认为 4.x。您可能需要一个 .htaccess 文件来确保您使用正确版本的 PHP。

另外,神奇的 __toString() 与 5.2+ 版本略有不同,根据 文档:

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

因此,这可能取决于您如何调用输出。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top