2011-06-30 14 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機能を使用します:あなたは、このような無効なメソッドが呼び出された場合などのデータを望んでいた場合、あなたはdebug_backtraceを使用することができます

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

を:

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

@Alex:はい、私の答えをチェックしてください。私が列挙した配列要素にアクセスするだけです。 –

+1

新しいException( '...')をスローするだけです。 – dynamic