如果我们有 php 5.1 而不是我一直使用的 5.2,我已经搬到了一个新的虚拟主机上。我仍然没有弄清楚这是一个php版本还是配置问题。
现在大多数(或所有)具有 __toString 函数的类都转换为“Object ID #”(如 php4 中),但在它们都返回正确值之前。
我怎样才能解决这个问题?
显然,在 PHP 5.2 之前,该__toString
方法只是在某些情况下“神奇地”调用(例如echo()
和print()
)。因此,如果您当前__toString()
在直接输出功能之外以“神奇”的方式使用它,它将无法按预期工作。
来源:
值得注意的是,在 PHP 5.2.0 之前,该方法仅在直接与or
__toString
结合时才被调用。自 PHP 5.2.0 起,它在任何字符串上下文中被调用(例如在with 修饰符中),但不在其他类型的上下文中(例如 with修饰符)。自 PHP 5.2.0 起,将没有方法的对象转换为字符串会导致.echo()
print()
printf()
%s
%d
__toString
E_RECOVERABLE_ERROR
一些主机公司(如 1and1)同时运行 PHP 4.x 和 5.x,默认为 4.x。您可能需要一个 .htaccess 文件来确保您使用的是正确版本的 PHP。
此外,根据文档,魔术 __toString() 与 5.2+ 版本略有不同:
值得注意的是,在 PHP 5.2.0 之前,__toString 方法只有在直接与 echo() 或 print() 结合时才会被调用。自 PHP 5.2.0 起,它在任何字符串上下文中调用(例如在 printf() 中使用 %s 修饰符),但不在其他类型上下文中调用(例如使用 %d 修饰符)。自 PHP 5.2.0 起,将没有 __toString 方法的对象转换为字符串会导致 E_RECOVERABLE_ERROR。
因此,这可能取决于您如何调用输出。