XII. クラス/オブジェクト関数
以下の関数により、クラスやインスタンスオブジェクトに関する情報を
得ることが可能となります。オブジェクトが属するクラスの名前、その
メンバープロパティ、メソッドを取得可能です。
この関数を使用することにより、オブジェクトのクラスメンバーだけで
なく親クラス(すなわちそのオブジェクトクラスの派生元)の情報を得る
ことも可能です。
PHP コアに含まれるため、
追加のインストール無しで使用できます。
この例では、まず基底クラスおよびそのクラスの派生クラスを定義しま
す。基底クラスは食用か否か、色とかいった、一般的な野菜を記述しま
す。サブクラスSpinachはその野菜の料理法と調理
済であるかどうかの情報を追加します。
例 1. classes.inc
<?php
// メンバープロパティとメソッドを有する基底クラス class Vegetable {
var $edible; var $color;
function Vegetable($edible, $color="green") { $this->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の終り
?>
|
|
続いて、これらのクラスから二つのオブジェクトのインスタンスを作成し、
親クラスを含む情報を出力します。
また、いくつかのユーティリティ関数を定義します。これらは主に変数
を格好良く表示するためのものです。
例 2. test_script.php
<pre> <?php
include "classes.inc";
// ユーティリティ関数
function print_vars($obj) { foreach (get_object_vars($obj) as $prop => $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"); ?> </pre>
|
注意すべき大事な点ですが、上記の例ではオブジェクト
$leafyは
Vegetableのサブクラスであるクラス
Spinachのインスタンスであり、
このスクリプトの最後の部分は以下のような出力となります。
[...]
Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable |
|
東京デリヘル 池袋デリヘル 新宿デリヘル 渋谷デリヘル 品川デリヘル
鶯谷デリヘル 大塚デリヘル 立川デリヘル 町田デリヘル 横浜デリヘル 埼玉デリヘル
千葉デリヘル 大阪デリヘル 神戸デリヘル 京都デリヘル 名古屋デリヘル デリヘル
アダルトレンタルサーバー アダルトレンタルサーバー 表札 断熱塗料 UGUISU
大阪 老人ホーム 京都 老人ホーム 兵庫 老人ホーム 和歌山 老人ホーム 滋賀 老人ホーム
奈良 老人ホーム 東京 老人ホーム 神奈川 老人ホーム 千葉 老人ホーム 埼玉 老人ホーム 老人ホーム