我有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”中的错误? 如何知道真正的错误位置并调试它?
我认为PHP应该告诉我第3行b.php中的错误,否则我很难调试。
答案 0 :(得分:2)
行号始终是触发异常或错误的行。
看一下PHP函数debug_backtrace()
。它提供了有关您正在寻找的调用堆栈的信息。
答案 1 :(得分:0)
在尝试创建B的实例之前,不会创建非静态MY_CONSTANT .B的静态方法是从A继承的静态方法,然后尝试实例化B并发现其中一个非静态值爆炸