2

我有 3 类 A、B 和 C,如下所示:

一个.php

<?php
abstract class A {
    public static function getInstance() {
        $child = get_called_class();
        $instance = new $child;
    }
}
?>

b.php

<?php
class B extends A {
    const MY_CONSTANT = SomeClass::UNKNOWN_CONSTANT;
}
?>

c.php

<?php

include 'a.php';
include 'b.php';
B::getInstance();
//Here will got an error 
//Fatal error: Class 'SomeClass' not found in a.php on line 5 

?>

显然 B 类中存在错误,但是当我调用 B::getInstance() 方法时,该错误消息是“致命错误:第 5 行的 a.php 中找不到类 'SomeClass'”

我不明白为什么该错误消息没有告诉我“b.php on line 3”中的错误?如何知道真正的错误位置并对其进行调试?

编辑 1

我认为 PHP 应该在第 3 行的 b.php 中告诉我错误,否则我将很难调试。

4

2 回答 2

2

行号将始终是触发异常或错误的行。

看看 PHP 函数debug_backtrace()。它提供了有关您正在寻找的调用堆栈的信息。

于 2013-01-16T20:27:06.973 回答
0

在您尝试创建 B 的实例之前,不会创建非静态 MY_CONSTANT。B 的静态方法是从 A 继承的静态方法,然后它尝试实例化 B 并发现其非静态值之一爆炸。

于 2013-01-16T20:28:49.643 回答