【问题标题】:Class not found (in PHP)找不到类(在 PHP 中)
【发布时间】:2014-12-23 19:48:30
【问题描述】:

这段代码没有问题:

<?php
namespace NamespaceA;
class A extends \NamespaceB\B {}

namespace NamespaceB;
class B {}

但是为什么下面的代码会导致致命错误:在 ...file 中找不到 Class 'NamespaceB\B'

<?php
namespace NamespaceA;
class A extends \NamespaceB\B {}

namespace NamespaceB;
class B extends \NamespaceC\C {}

namespace NamespaceC;
class C {}

而且这段代码也可以正常工作:

<?php
namespace NamespaceA;
class A extends \NamespaceB\B {}

namespace NamespaceC;
class C {}

namespace NamespaceB;
class B extends \NamespaceC\C {}

统一更新: 没有任何命名空间,也 致命错误:在 ...file 中找不到 Class 'B'

<?php

class A extends B {}

class B extends C {}

class C {}

工作没有问题:

<?php

class A extends B {}

class B {}

【问题讨论】:

  • 见鬼:这行得通php -r 'class B extends C {} class D extends C{} class E extends D{} class C{}',但这不行php -r 'class B extends C {} class D extends C{} class C extends A{} class E extends D{} class A{}'

标签: php fatal-error classnotfound


【解决方案1】:

http://php.net/manual/en/keyword.extends.php

类必须在使用前定义。如果您希望 A 类扩展 B 类,则必须先定义 B 类。定义类的顺序很重要。

编辑:

发现更多:

Fatal error when extending included class

经过一些研究,很明显,实际上您可以在声明一个类之前使用它。但是,类的声明和所有的父类必须在同一个文件中。

因此,如果您在一个文件中声明父类,而在另一个文件中声明子类,它将不起作用。

此外,您必须先声明父类。之后,您可以扩展它们。

编辑编号 2

好的,所以我对这个问题进行了更多研究。可能有一些内部实现细节目前允许一个案例工作(我的猜测是关于自动加载的东西)但是这是可以随时改变的东西,永远不应该依赖。

【讨论】:

  • 你如何解释代码没有问题? ```
  • 运行第二个示例代码(不使用不同的文件)
  • "在声明扩展类时,父类还不存在,会导致扩展类也不存在。"根据我的发现,口译员首先阅读声明。因此,对于您的第三个示例,它声明了 C,然后是扩展 C 的 B,然后是扩展 B 的 A。在示例 2 中,声明了 C,然后声明了尚未声明的 B,因此它会引发错误。
  • 这个答案没有解释问题暴露的行为。
  • 完全同意“随时可能改变,永远不应该依赖的部分。”
【解决方案2】:

首先使用 include_once() 将所有文件添加到您的索引文件中,当您扩展到任何类时,首先实例化该父类。示例:

index.php-->
<?php
    include_once('parentClass.php');
    include_once('childClass.php');

    $parentObj = new parent();
    $childObj = new child();
?>

child.php-->
<?php
  class child extends parent{
   function __construct(){

    }
  }
?>

【讨论】:

    猜你喜欢
    • 2019-11-19
    • 2012-12-02
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2013-01-22
    相关资源
    最近更新 更多