クラス/オブジェクト関数

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

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

# 導入

## 概要

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

## 使用例

この例では、まず基底クラスおよびそのクラスの派生クラスを定義しま す。基底クラスは食用か否か、色とかいった、一般的な野菜を記述しま す。サブクラス`spinach`はその野菜の料理法と調理 済であるかどうかの情報を追加します。

例 1classes.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の終り

    ?>

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

例 2test_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

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