【问题标题】:Class resolution quirk with 'implements'类解析怪癖与“实现”
【发布时间】:2013-11-26 11:11:59
【问题描述】:

有人可以解释以下内容吗,对我来说似乎是一个错误。

<?php

class A implements JsonSerializable {
    public function jsonSerialize() { return []; }
}

new A();
new B();
new C();

class B {}
class C implements JsonSerializable {
    public function jsonSerialize() { return []; }
}

有以下结果

$ php test.php

Fatal error: Class 'C' not found in test2.php on line 9

【问题讨论】:

  • 新 B();在 B 类之前调用​​,显然找不到
  • 在调用之前定义类?如果引擎不正常强制,那肯定是更好的设计模式。
  • 是的,我自己解决了我的问题 - 文档说“应该在实例化之前定义类(在某些情况下这是一个要求)。”我发现的问题是,当我删除了它在定义它之前调用它的 implements 语句=>在某些情况下它是文档的必需部分。

标签: php php-5.4


【解决方案1】:

这很简单,将实例化移到类定义之后。 PHP 在第 8 行没有找到任何 B 类。

【讨论】:

    【解决方案2】:

    类应该在实例化之前定义(在某些情况下这是一个要求)。

    使用 implements 时,这是一项要求 - 因此它在没有 implements 语句的情况下工作。

    【讨论】: