2016-05-24 8 views
5

私は自分で簡単なエラー処理を行い、実際にはすべて私が必要とするログを&で記録することができます。しかし、今私はtry{}catch(){}でエラーをキャッチする必要があります。その場所で発生すると予想されるエラーは、「未定義メソッドへの呼び出し」エラーです。私はこのようにそれをキャッチすることができます:PHP 7の "未定義メソッドへの呼び出し"エラーをキャッチするには?

catch句の
try { 
    $someObject->someMethodTheObjectDoesntProvide(); 
} catch (Error $e) { 
    // do something else 
} 

しかしErrorクラスは、汎用のビットです。私はこのタイプのエラーだけをキャッチしたいと思います。

特定の「タイプ」のエラーにキャッチを制限する方法はありますか? strpos($errorMessage)を使用せずに

...;メソッドが存在しない場合)

+1

いいえ、異なるエラー/例外クラスのみです。これは単なる汎用的な 'Error'クラスです –

+0

' __call() 'が存在しないメソッドへの呼び出しを傍受するか(またはアクセスできないメソッドに対してのみ)傍受するか分かりません。他のエラーと違って捕まえられて渡されます。 –

+0

おそらく、特定のエラーだけでなく、発生したエラーをキャッチしたいと思うかもしれません。しかし、キャッチされたブロック内の特定のアクションを、エラーの型に基づいて実行することができます – WillardSolutions

答えて

3

あなたの授業で魔法__call()メソッドを使用して、カスタム例外をスローするために使用することができ

class myCustomException extends Exception { 
} 

class someClass { 
    public function __call($name, $arguments) { 
     if (!method_exists($this, $name)) { 
      throw new myCustomException($name . ' has shuffled the mortal coil'); 
     } 
    } 
} 


$someObject = new someClass(); 
try { 
    $someObject->someMethodTheObjectDoesntProvide(); 
} catch (myCustomException $e) { 
    echo $e->getMessage(); 
} 

Demo

+0

あなたの答えとデモをありがとう!残念ながら、これは非常に不都合な制限があるため、この問題を解決することはできません。このアプローチを使用すると、 'someMethodTheObjectDoesntProvide()'メソッドの 'SomeClass'クラスは' HasCallMagicMethod'インターフェースのようなものを実装する必要があります。組み込みではない例外とエラーは普通ですが、 'Notice'はビルトインのものであり、' throwing 'クラスで特別なものを実装せずにキャッチする必要があります。しかし、問題は別の方法(まだ)で解決することはできませんし、あなたの提案は非常に良い回避策です。もう一度ありがとう! – automatix

関連する問題