Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未找到类(在PHP中)_Php_Fatal Error_Classnotfound - Fatal编程技术网

未找到类(在PHP中)

未找到类(在PHP中),php,fatal-error,classnotfound,Php,Fatal Error,Classnotfound,此代码工作正常: <?php namespace NamespaceA; class A extends \NamespaceB\B {} namespace NamespaceB; class B {} <?php namespace NamespaceA; class A extends \NamespaceB\B {} namespace NamespaceC; class C {} namespace NamespaceB; class B extends \Name

此代码工作正常:

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

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

namespace NamespaceC;
class C {}

namespace NamespaceB;
class B extends \NamespaceC\C {}
<?php

class A extends B {}

class B {}

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

编辑:

找到更多:

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

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

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

编辑编号2

<?php

class A extends B {}

class B extends C {}

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

首先使用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(){

    }
  }
?>
index.php-->
child.php-->

那么,您如何解释代码可以正常工作运行第二个示例代码(不使用不同的文件)“当声明扩展类时,父类还不存在,这将导致扩展类也不存在。”根据我的发现,解释器首先读取声明。所以对于第三个例子,它声明了C,然后B扩展了C,然后A扩展了B。在例子2中,C被声明,然后A声明了B,还没有声明,所以它抛出了一个错误。这个答案没有解释问题所揭示的行为。完全同意这个部分“这在任何时候都可能改变,永远不应该被依赖。”见鬼的兔子洞:这是有效的
php-r'类B扩展C{}类D扩展C{}类E扩展D{}类C{}
,但这不是
php-r'类B扩展C{}类D扩展C{}类C扩展a{}类E扩展D{}类a{}
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(){

    }
  }
?>