15

スクリプトがサーバーからの出力を読み取れず、次のエラーが発生することがあります。

PHP Fatal error: Call to a member function somefun() on a non-object

これは私の側では修正できないものではありませんが、これによりスクリプトがクラッシュします。この特定のエラーが発生したときに実行される関数を作成する方法はありますか?メンバー関数が呼び出されるすべてのインスタンスを見つけて、オブジェクトが存在するかどうか(数千)をテストする必要があるため、try-catchなどを作成するのは実用的ではないと思います。

4

3 に答える 3

41

PHP7では

はい、スロー可能な「エラー」をキャッチします。http://php.net/manual/en/language.errors.php7.php を参照してください

デモ: https://3v4l.org/Be26l

<?php

$x = "not an object";

try {
 $x->foo();
} catch (\Throwable $t) {
 echo "caught";
}

PHP5では

この特定のエラーが発生したときに実行される関数を作成する方法はありますか?

はい、「 register_shutdown_function 」を使用して、このエラーが発生した後に終了する直前に PHP に関数を呼び出させることができます。

PHP: 致命的なエラーをキャッチする (非オブジェクトでのメンバー関数の呼び出し)

PHP では「オブジェクト以外のメンバー関数の呼び出し」を「致命的な」エラーとして定義しているため、このエラーから回復することはできません。これがなぜなのかについては、PHP が「非オブジェクトのメンバー関数の呼び出し」を例外に変えるを参照してください。

于 2013-03-19T17:03:43.900 に答える
0

http://www.php.net/manual/en/function.set-error-handler.phpを探しているかもしれません。独自のエラー ハンドラを作成し、エラーを表示するかどうかをエラーコードで確認する必要があります。

于 2012-07-15T04:01:15.597 に答える
-1

function_existsを使用して、関数が存在することを確認してみてください。

if (function_exists("somefun")) {
   ...
}

またはmethod_existsを使用してクラス メソッドを検証します。

于 2012-07-15T03:59:44.817 に答える