2013-01-16 83 views
2

我有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錯誤,否則我會很難調試。

+0

http://php.net/manual/en/function.debug-backtrace.php – goat

+1

我爲此使用Xdebug。它顯示了stacktrace和一個更令人討厭的錯誤消息,即純PHP。在我看來,開發機器上更討厭的是好的。 –

+0

@joe我想建議你使用一個任意的IDE,它會直接向你顯示這樣的錯誤:) – KingCrunch

回答

2

行號將始終是觸發異常或錯誤的行。

看看PHP函數debug_backtrace()。它提供了您正在尋找的調用堆棧的信息。

+0

甚至更​​好:調試器:D – KingCrunch

0

在您嘗試創建B的實例之前,不會創建非靜態MY_CONSTANT。B的靜態方法是從A繼承的靜態方法,然後嘗試實例化B並發現它的一個非靜態值爆炸。

+0

但我認爲PHP應該告訴我錯誤在第3行b.php,否則我會很難調試。 – Jasper

相關問題