2011-06-30 105 views
3

我想如果一個方法犯規」爲Method()存在顯示自定義錯誤消息或getMethod()PHP自定義異常消息

public function __call($name, $args = array()){ 
    $getter = "get{$name}"; 

    try { 
    echo call_user_func_array(array(&$this, $getter), $args); 
    } catch (Exception $e) { 

    trigger_error($e->getFile.' on line '.$e->getLine.': Method '.$name.' is not defined.', E_USER_ERROR) 
    } 
} 

,但它不工作。在瀏覽器中收到「遠程服務器關閉的連接」消息:|

+1

http://php.net /manual/en/function.method-exists.php – Tomalak

+0

是的,我知道這一點,但我想用這個嘗試捕捉的東西,因爲它告訴我的行/文件錯誤是 – Alex

+0

亞歷克斯你知道如何拋出異常? – dynamic

回答

3

您將使用method_exists功能:如果你想數據

if(!method_exists($this, $name)) 
{ 
    // trigger_error(...); 
} 

如在無效的方法是從調用,您可以使用debug_backtrace

class X 
{ 
    public function __call($name, $a) 
    { 
     $backtrace = debug_backtrace(); 
     $backtrace = $backtrace[1]; 
     // $backtrace['file'] 
     // $backtrace['line'] 
     // $backtrace['function'] 
     // $backtrace['class'] 
     // $backtrace['object'] 
    } 
} 

$o = new X(); 
$o->Hello(); 
+0

我可以使用這個獲得錯誤的文件/行嗎? – Alex

+0

@亞歷克斯:是的,檢查我的答案。只需訪問我列出的那些數組元素。 –

+1

你只需要拋出新的異常('...'); – dynamic