ホームページ >バックエンド開発 >PHPチュートリアル >PHP でのインターセプターの使用について

PHP でのインターセプターの使用について

WBOY
WBOYオリジナル
2016-06-13 13:07:45927ブラウズ

PHPインターセプタの使用について
ようやく入学試験が終わり、落ち着いてコードブックをもう一度読むことができます

わかりました、PHP の学習を続けましょう

php には、未定義の宛先に送信されたメッセージをインターセプトできる組み込みのインターセプターが用意されていますメソッドとプロパティ メッセージ

まず、主に未定義のプロパティにアクセスするときに呼び出される __get($property) を見てください。

例を見てください:
class Coder{
function __get( $property){
$method = "get{$property}";
if(method_exists($this,$method)){
return $this->$method();
}
}

function getName(){
return "SUN";
}
}

$coder = new Coder();
print $coder->name;

プログラムの実行後、SUN が出力されます。プログラム内にそのようなメソッドが存在しない場合は、何も行われず、NULL

に解析されます。同様のメソッドが利用可能です __set()、__isset、__unset

以下では主に __call() メソッドについて説明します。これは、未定義のメソッドを呼び出すときに呼び出されます。これには 2 つのパラメータがあります。
1.$method。
2.$arg_array、呼び出されるメソッドに渡されるすべてのパラメータ (配列)

__call() メソッドはデリゲート
class CoderWrite{
function printName(Coder $c){
print $c->getName();
}
}

class Coder{
private $write;
function __construct(CoderWrite $cw){
$this->gt;write=$cw;
}

function __call($methodname,$args){
if(method_exists($this ->write,$methodname)){
return $this->write->$methodname($this);
}
}

function getName(){
Return "SUN";
}
}

呼び出し: $coder = new Coder(new CoderWrite());
$coder->printName ();
_call() メソッドが呼び出され、CoderWrite オブジェクトに printName() メソッドがあるかどうかを確認します。存在する場合は、それが呼び出されます。ははは、Coder オブジェクトに追加された偽装メソッドですか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。