2017-01-16 1 views
4

何年ものPHPコードでは、従来のエラーをset_error_handler()とset_exception_handler()を介してExceptionsに変換することで、例外処理を頻繁に使用してきました。PHP 7のエラーオブジェクトをExceptionに変換しますか?

Uncaught TypeError: Argument 1 passed to DataStellar\General\Exception_Handler::getContext() must be an instance of Exception, instance of Error given 

我々は型ヒントとしてのThrowable \使用することができますが、私たちのコードベースのほとんどはPHP 5のサーバーに残っている:当社のサーバーのいくつかのためにPHP 7に移行した後、このようなエラーが出て、ポンピングを開始しました。

ErrorオブジェクトをExceptionオブジェクトに簡単に変換できる方法はありますか?

+0

あなたのサーバをアップグレードするか、あなたのPHPバージョンをダウングレードしてください – samayo

答えて

4

メソッドの定義から型ヒントを削除し、何をするかを決定するのにget_class()またはinstanceofを使用できます。

class Exception_Handler 
{ 
    public static function getContext($error) 
    { 
     if (class_exists('\\Error') && $error instanceof \Error) { 
      // PHP 7 Error class 
      // handle and return 
     } 

     if ($error instanceof \Exception) { 
      // PHP Exception class (user exception in PHP7) 
      // handle and return 
     } 

     // weird edge case 
    } 
} 
+0

しかし、エラーオブジェクトと例外オブジェクトはインタフェースの点で相互交換可能ですか?同じメソッドとプロパティですか? –

+1

はい、どちらも\ Throwableを実装しています。PHP7ではエラーが発生しません。エラーオブジェクトを取得するだけです:http://php.net/manual/en/class.error.php && http://php.net /manual/en/class.exception.php – motanelu

+0

実際、 '\ Throwable'は新しい例外ベースクラスです。 – Andrea

関連する問題