ホームページ > バックエンド開発 > PHPチュートリアル > PHP オブジェクト指向 __call 処理エラー呼び出しスキル_PHP チュートリアル

PHP オブジェクト指向 __call 処理エラー呼び出しスキル_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:49:43
オリジナル
1021 人が閲覧しました

この記事では、PHP オブジェクト指向 __call でエラー呼び出しを処理するテクニックを紹介します。Call はこれまでほとんど使用されていなかったので、今日はそれをテストします。


__call について言及する前に、__call メソッドの役割をよりよく理解するために、まず例のテスト結果を見てみましょう。上のコード:

オブジェクトに存在しないメソッドを呼び出すと、システムエラーが発生し、プログラムが終了して実行を続行できなくなります。 「魔法の」メソッド __call() をクラスに追加すると、オブジェクトに存在しないメソッドを呼び出すときにそのメソッドが自動的に呼び出され、プログラムの実行を続行できます。 __call() メソッドの設定を通じて、呼び出されたメソッドと必要なパラメーターのリストが存在しないことをユーザーに通知できます。 __call() メソッドには 2 つのパラメータが必要です。最初のパラメータは、存在しないメソッドを呼び出すときに存在しないメソッドのメソッド名を受け取り、存在しないメソッドで使用されるパラメータ リストを渡して配列を形成します。それをメソッドの __call() の 2 番目のパラメータに渡します。

コード

コードは次のとおりです コードをコピー

//これはテストクラスであり、属性やメソッドはありません
クラステスト
{
}


//Testクラスのオブジェクトを生成

$test=新しいテスト();


//オブジェクトに存在しないメソッドを呼び出す

$test->demo("one", "two", "three");


//ここではプログラムは実行されません

echo "これはテストです
";


?>

実行結果: 致命的なエラー: 未定義メソッド Test::demo() の呼び出し

プログラムの実行結果でエラー メッセージがスローされ、実行プロセス中にエラーがスローされて中断されたため、「$person->say();」の正しいメソッドが実行を続行できないことがわかっています。 。上記のコードを見ると、Person クラスにコード エラーがないことがわかります。間違いは、Person クラスをインスタンス化するプロセスで、run などの Person クラスに存在しないメソッドが呼び出されていることです。 () そして、食べます()。

プログラムの実行中にスローされる上記のエラーは致命的であり、プログラム全体がクラッシュします。プログラムの実行を継続しながらこのエラーを処理するには、マジック メソッド __call をクラスに追加して、オブジェクトに存在しないメソッドを呼び出すときにそのメソッドを自動的に呼び出し、プログラムの実行を継続できるようにします。

以下は、追加の __call メソッドを追加し、上記のコードに基づいてデバッグします。コードは次のとおりです。 コード

コードは次のとおりですコードをコピー

//これはテストクラスであり、属性やメソッドはありません

クラステスト
{

//存在しないメソッドを呼び出すときに自動的に呼び出されるメソッド、最初のパラメータはメソッド名、2 番目のパラメータは配列パラメータです

function __call($function_name, $args)

                                                            
印刷

print_r($args);

echo "存在しません!
n";

}

}

//Testクラスのオブジェクトを生成

$test=新しいテスト();


//オブジェクトに存在しないメソッドを呼び出す

$test->demo("one", "two", "three");


//プログラムは終了せず、ここで実行できます

echo "これはテストです
";


?>

実行結果:

あなたが呼び出した関数: run (パラメータ: Array ([0] => Teacher)) は存在しません。

あなたが呼び出した関数: Eat (パラメータ: Array ([0] => child [1] => apple)) は存在しません。

こんにちは、wblog!

今回は、存在しないメソッドを呼び出すときにプログラムの実行結果で致命的なエラーがスローされなくなり、存在しないメソッドをキャプチャするために __call メソッドが自動的に呼び出され、既存のメソッドを呼び出すときにユーザーにプロンプ​​トが表示されます。正常に実行されます。
概要: マジック メソッド __call をクラスに追加します。このメソッドは、オブジェクトに存在しないメソッドを呼び出すときに自動的に呼び出され、プログラムの実行を続行できます。


http://www.bkjia.com/PHPjc/632688.html

www.bkjia.com

http://www.bkjia.com/PHPjc/632688.html技術記事この記事では、PHP オブジェクト指向の __call でエラー呼び出しを処理するテクニックを紹介します。Call はこれまでほとんど使用されなかったので、今日はそれをテストします。 __call について言及する前に、まず...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート