2

次のように、A、B、および C として 3 つのクラスがあります。

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() メソッドを呼び出すと、そのエラー メッセージは「Fatal error: Class 'SomeClass' not found in a.php on line 5」です。

エラーメッセージが「b.php on line 3」のエラーを教えてくれない理由がわかりませんか? その本当のエラーの場所を知り、それをデバッグする方法は?

編集1

PHP は 3 行目の b.php でエラーを通知する必要があったと思います。そうしないと、デバッグが困難になります。

4

2 に答える 2

2

行番号は常に、例外またはエラーをトリガーした行になります。

PHP 関数を見てくださいdebug_backtrace()。探しているコール スタックに関する情報を提供します。

于 2013-01-16T20:27:06.973 に答える
0

非静的 MY_CONSTANT は、B のインスタンスを作成しようとするまで作成されません。B の静的メソッドは、A から継承された静的メソッドであり、B をインスタンス化しようとし、その非静的値の 1 つが爆発することを検出します。

于 2013-01-16T20:28:49.643 に答える