Java や COM と同様に、PHP4 には外部オブジェクト モデルへのマッピングを確立するためのオーバーロード構文が備わっており、PHP5 では強力なオブジェクト指向オーバーロードが可能になり、プログラマはプロパティにアクセスしてメソッドを呼び出すためのカスタム動作を作成でき
ます
。__set および __call。Zend エンジンがメンバーにアクセスしようとして見つからない場合、PHP はこれらのメソッドを呼び出して、
必要に応じて属性変数の配列にアクセスします。たとえば、スクリプトでは、属性値の設定を無効にしたり、特定のプレフィックスで開始したり、特定の種類の値を含めたりすることができます。
これは、未定義のメソッドを呼び出すときにどのように実行できるかを示しています。 、メソッド名とメソッドによって受け取られたパラメータは __call メソッドに渡され、PHP は __call の値を
ユーザーレベルのオーバーロード
<?php
に返します。
クラスオーバーローダー
{
プライベート $properties = array()
関数 __get($property_name);
{
if(isset($this->properties[$property_name]))
{
return($this->properties[$property_name]);
}
それ以外
{
戻り値(NULL);
}
関数
__set($プロパティ名, $値)
{
$this->properties[$property_name] = $value;
関数
__call($関数名, $args)
{
print("$function_name() を呼び出していますn");
print("引数: ");
print_r($args);
戻り値(TRUE);
}
}
$o = new Overloader();
//__set() を呼び出し、存在しない属性変数に値を代入し、__set() を起動します。
$o->dynaProp = "動的コンテンツ";
// __get() を起動し、__get() を起動します。
print($o->dynaProp . "n");
// __call() を起動し、 __call() を起動します。
$o->dynaMethod("レオン", "ジーヴ");
?>
クラスの自動ロード
未定義のクラスを使用しようとすると、PHP は致命的なエラーを報告します。ただし、最終的には、どのクラスを使用するかはわかっています。クラスの自動ロード機能を提供します。これにより、PHP が編成していないクラスを使用しようとすると、グローバル関数 __autoload が検索されます。この関数が存在する場合、PHP はパラメーターを使用してそれを呼び出します。パラメータはクラスの名前です。
例図 2 は、現在のディレクトリ内の各ファイルがクラスに対応することを想定しています。スクリプトの前提条件は、PHP が __autoload を実行することです。 User クラスは class_User.php で定義されます。呼び出しが大文字か小文字かに関係なく、PHP はクラス
の自動ロード
<?php
を返します。
//オートロード関数を定義する
関数 __autoload($class)
{
include("class_" . ucfirst($class) . ".php");
}
//自動ロードする必要があるクラスを使用する
$u = 新しいユーザー;
$u->name = "レオン";
$u->printName();
?>