【问题标题】:Implicit conversion to string instead of getting "Object ID #.."隐式转换为字符串而不是获取“对象 ID #..”
【发布时间】:2009-06-02 18:44:13
【问题描述】:

如果我们使用的是 php 5.1 而不是我一直使用的 5.2,那么我已经搬到了一个新的虚拟主机上。还是不知道是php版本问题还是配置问题。

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

我该如何解决这个问题?

【问题讨论】:

  • 你能对你遇到的问题更明确一点吗?更详细地了解之前(5.2)和现在(5.1)发生了什么?

标签: php string object casting tostring


【解决方案1】:

显然在 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

【讨论】:

  • 我意识到有些输出是通过回声,有些是作为返回值。现在我已经联系了支持人员来更新 php5。谢谢
  • 没问题 - 确保它的 PHP 5.2 是截止日期。
【解决方案2】:

一些主机公司(如 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 起,它在任何字符串上下文中被调用(例如,在 printf() 中使用 %s 修饰符),但不在其他类型的上下文中(例如,使用 %d 修饰符)。自 PHP 5.2.0 起,将没有 __toString 方法的对象转换为字符串会导致 E_RECOVERABLE_ERROR。

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

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2019-01-24
    相关资源
    最近更新 更多