怎么知道错误在哪里?

时间:2013-01-16 20:23:39

标签: php

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

a.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'”

我不明白为什么错误信息没有告诉我“第3行的b.php”中的错误? 如何知道真正的错误位置并调试它?

编辑1

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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