ホームページ >バックエンド開発 >PHPチュートリアル >PHP でのインターセプターの使用について
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 オブジェクトに追加された偽装メソッドですか?