同一文件中的类定义会导致致命错误

und*_*one 5 php class

我知道在PHP中你可以定义一个类,无论它在文件中的位置如何,你都可以使用该类.例如,看看下面的代码:

<?php 

//First case. No errors.
class Second extends First{}
class First{};

//Second case. Still nothing.
abstract class B extends A{};
class C extends B{};
class A{};

//Fatal error!
class C1 extends B1 { };
abstract class B1 extends A1{ };
class A1 { };
?>
Run Code Online (Sandbox Code Playgroud)

前两种情况很好但不是最后一种情况.为什么?有规则吗? 致命错误

PS; 我使用的是PHP 5.6.25,Apache 2.4,CentOS 6.7.

Mar*_*ioZ 2

我找不到相关的书面规则,但看到了结果:

<?php
//A1 Exists
echo class_exists("A1")?"A1 Exists<br>":"A1 Not exists<br>";
//B1 Not exists
echo class_exists("B1")?"B1 Exists<br>":"B1 Not exists<br>";
//C1 Not exists
echo class_exists("C1")?"C1 Exists<br>":"C1 Not exists<br>";
class C1 extends B1 {};
class B1 extends A1{ };
class A1 { };
?>
Run Code Online (Sandbox Code Playgroud)

我可以发现解释器可以前后查找父类,但是当您链接第三级继承时,它无法预测 B1 将存在。

如果你这样做:

<?php
//A1 Exists
echo class_exists("A1")?"A1 Exists<br>":"A1 Not exists<br>";
//B1 Not exists
class B1 extends A1{ };
class A1 { };
?>
Run Code Online (Sandbox Code Playgroud)

它说“好吧,我之前没有看到 A1 类声明,但我看到它在前面”。