クラス/オブジェクト関数 クラス/オブジェクト
&reftitle.intro; 以下の関数により、クラスやインスタンスオブジェクトに関する情報を 得ることが可能となります。オブジェクトが属するクラスの名前、その メンバープロパティ、メソッドを取得可能です。 この関数を使用することにより、オブジェクトのクラスメンバーだけで なく親クラス(すなわちそのオブジェクトクラスの派生元)の情報を得る ことも可能です。
&reftitle.required; &no.requirement;
&reftitle.install; &no.install;
&reftitle.runtime; &no.config;
&reftitle.resources; &no.resource;
&reftitle.constants; &no.constants;
&reftitle.examples; この例では、まず基底クラスおよびそのクラスの派生クラスを定義しま す。基底クラスは食用か否か、色とかいった、一般的な野菜を記述しま す。サブクラスSpinachはその野菜の料理法と調理 済であるかどうかの情報を追加します。 classes.inc edible = $edible; $this->color = $color; } function is_edible() { return $this->edible; } function what_color() { return $this->color; } } // クラスVegetableの終り // 基底クラスを拡張する class Spinach extends Vegetable { var $cooked = false; function Spinach() { $this->Vegetable(true, "green"); } function cook_it() { $this->cooked = true; } function is_cooked() { return $this->cooked; } } // クラスSpinachの終り ?> ]]> 続いて、これらのクラスから二つのオブジェクトのインスタンスを作成し、 親クラスを含む情報を出力します。 また、いくつかのユーティリティ関数を定義します。これらは主に変数 を格好良く表示するためのものです。 test_script.php $val) { echo "\t$prop = $val\n"; } } function print_methods($obj) { $arr = get_class_methods(get_class($obj)); foreach ($arr as $method) { echo "\tfunction $method()\n"; } } function class_parentage($obj, $class) { if (is_subclass_of($GLOBALS[$obj], $class)) { echo "Object $obj belongs to class " . get_class($$obj); echo " a subclass of $class\n"; } else { echo "Object $obj does not belong to a subclass of $class\n"; } } // 二つのオブジェクトのインスタンスを作成 $veggie = new Vegetable(true, "blue"); $leafy = new Spinach(); // オブジェクトに関する情報を出力 echo "veggie: CLASS " . get_class($veggie) . "\n"; echo "leafy: CLASS " . get_class($leafy); echo ", PARENT " . get_parent_class($leafy) . "\n"; // veggieのプロパティを表示 echo "\nveggie: プロパティ\n"; print_vars($veggie); // そしてleafyのメソッドを表示 echo "\nleafy: メソッド\n"; print_methods($leafy); echo "\nParentage:\n"; class_parentage("leafy", "Spinach"); class_parentage("leafy", "Vegetable"); ?> ]]> 注意すべき大事な点ですが、上記の例ではオブジェクト $leafyVegetableのサブクラスであるクラス Spinachのインスタンスであり、 このスクリプトの最後の部分は以下のような出力となります。
&reference.classobj.functions;