Java や COM と同様に、PHP4 には外部オブジェクト モデルへのマッピングを確立するためのオーバーロード構文が備わっており、PHP5 は強力なオブジェクト指向オーバーロードを提供し、プログラマーがプロパティにアクセスしてメソッドを呼び出すためのカスタム動作を作成できるようにします。
オーバーロードを実行できます。 Zend エンジンがメンバーにアクセスしようとして見つからない場合、PHP はこれらのメソッドを呼び出します。
例 6.14 では、__get と __set が属性へのすべてのアクセスを置き換えます。必要に応じて、スクリプトで属性値の設定を無効にしたり、特定のタイプの値を含めたりすることができます。未定義のメソッドを呼び出す方法について説明します。未定義のメソッドを呼び出すと、メソッド名とそのメソッドが受け取ったパラメータが __call メソッドに渡され、PHP は返された __call 値を未定義のメソッドに渡します。
リスト 6.14 ユーザーレベルのオーバーロード
クラス オーバーローダー
{
private $properties = array();
function __get($property_name)
{
if(isset($this- >properties[$property_name]))
{
return($this->properties[$property_name]);
}
else
{
return(NULL);
}
}
function __set($property_name, $value)
{
$this->properties[$property_name] = $value; >
function __call($function_name, $args)
{
print("$function_name()
n");
print("引数: "); print_r($args);
return(TRUE);
}
}
$o = new Overloader()
// __set() を呼び出します。存在しない属性変数に値を割り当てるには、 activate __set()
$o->dynaProp = "Dynamic Content"
//invoke __get() activate __get()
; print($ o->dynaProp . "
n");
//__call() を起動する
$o->dynaMethod("Leon", "Zeev) ") ;
?>