这是一个php bug吗? (关于延伸)

时间:2011-06-15 08:58:50

标签: php

class A extends B {}
class B extends C{}
class C {}

结果

PHP Fatal error: class 'B' not found ...

如果订单是这样的

class A extends B {}
class C {}
class B extends C{}

一切都很好。


PS:如果我删除C类{}

class A extends B {}
class B extends C{}

php告诉我找不到'B'班,为什么?

php version 5.3.4

5 个答案:

答案 0 :(得分:5)

PHP manual明确提到:

  

必须在它们之前定义类   用的!如果你想要上课   Named_Cart扩展类Cart,   你必须定义类Cart   第一。如果你想创造另一个   类名为Yellow_named_cart   在你必须的Named_Cart类   首先定义Named_Cart。为了做到这一点   简短:类的顺序   定义很重要。

答案 1 :(得分:2)

显然是一个解析器错误

这是有效的

class A extends B {}
class B {}

这不是

class C extends D {}
class D extends E {}
class E {}

考虑报告bugs.php.net

答案 2 :(得分:0)

类定义在PHP定义中很重要。

Does the order of class definition matter in PHP?

这就是为什么你没有在你定义的类之后定义的类的可见性(在这种情况下class A看不到class B,因为它是在之后定义的。)

答案 3 :(得分:0)

因为php是解释而不是编译的,所以声明的顺序必须是有效的。在这个例子中,A不存在B类扩展。

答案 4 :(得分:0)

在尝试扩展它时,{I} {I}}没有定义,因为它发生在class B之后。它不是一个错误,它是世界运作的方式:你只能使用,存在的东西;)