如何理解“必须在使用之前定义类”关键字“extends”的php手册

时间:2013-08-27 07:00:56

标签: php extends

我得到2个php文件 a.php只会

<?php
class A extends B {}
class B{}

php a.php
&gt;&gt;&gt;没有错误

b.php

<?php
class A extends B {}
class B extends C {}
class C{}

php b.php
&gt;&gt;&gt;&gt; Fatal error: Class 'B' not found in b.php on line 2

根据[php.net manual]

  

必须在使用类之前定义类!如果你想要上课   Named_Cart扩展类Cart,你将不得不定义类   购物车第一。如果要创建另一个名为的类   Yellow_named_cart基于您必须定义的Named_Cart类   首先命名为_Cart。简而言之:类的顺序   定义很重要。

所以anyboy请解释为什么a.php没有“致命错误”。

1 个答案:

答案 0 :(得分:2)

根据PHP Inheritence doc。

  

除非使用自动加载,否则必须在它们之前定义类   使用。如果一个类扩展另一个类,那么父类必须是   在子类结构之前声明。此规则适用于   继承其他类和接口的类。

此示例对B类和D类没有依赖关系:

<?php
 //This will work
 class A extends B {} //searches for class B in current document
 class B {}

 class C extends D{}
 class D{}

B类依赖于C类

<?php
 //This will not work
 class A extends B {} //searches for class B in current document but class B has dependencies
 class B extends C {}
 class C{}

对于includes和require,必须在使用该文件中声明的函数/类之前包含该文件。

另见autoloading