PHP マニュアル
前のページ |  | 次のページ

# IX. クラス/オブジェクト関数

# 導入

以下の関数により、クラスやインスタンスオブジェクトに関する情報を 得ることが可能となります。オブジェクトが属するクラスの名前、その メンバープロパティ、メソッドを取得可能です。 この関数を使用することにより、オブジェクトのクラスメンバーだけで なく親クラス(すなわちそのオブジェクトクラスの派生元)の情報を得る ことも可能です。

# 要件

これらの関数は、標準モジュールの一部として利用可能であり、常に使用できます。

# インストール手順

これらの関数は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-&gt;cooked;
}
} // クラスSpinachの終り
?>`

続いて、これらのクラスから二つのオブジェクトのインスタンスを作成し、 親クラスを含む情報を出力します。 また、いくつかのユーティリティ関数を定義します。これらは主に変数 を格好良く表示するためのものです。

例 2. test_script.php

`<pre>
<?php
include "classes.inc";
// ユーティリティ関数
function print_vars($obj) {
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
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) {
global $$obj;
if (is_subclass_of($$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

前のページ | ホーム | 次のページ
variant_xor | 上に戻る | call_user_method_array