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>

注意すべき大事な点ですが、上記の例ではオブジェクト $leafyVegetableのサブクラスであるクラス Spinachのインスタンスであり、 このスクリプトの最後の部分は以下のような出力となります。

[...]
Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable

目次
call_user_method_array -- パラメータの配列を指定してユーザメソッドをコールする[古い関数]
call_user_method -- 指定したオブジェクトのユーザーメソッドをコールする[古い関数]
class_exists -- クラスが定義済か確認する
get_class_methods -- クラスメソッドの名前を取得する
get_class_vars -- クラスのデフォルトプロパティを取得する
get_class -- オブジェクトのクラス名を返す
get_declared_classes -- 定義済のクラスの名前を配列として返す
get_declared_interfaces -- 宣言されている全てのインターフェースの配列を返す
get_object_vars -- オブジェクトのプロパティを取得する
get_parent_class -- オブジェクトの親クラスの名前を取得する
interface_exists -- インターフェースが宣言されているかどうかを確認する
is_a -- オブジェクトがこのクラスのものであるか、このクラスをその親クラスのひとつとしているかどうかを調べる
is_subclass_of -- あるオブジェクトが指定したクラスのサブクラスに属するかどうかを調べる
method_exists -- クラスメソッドが存在するかどうかを確認する
property_exists --  オブジェクトもしくはクラスにプロパティが存在するかどうかを調べる


東京デリヘル 池袋デリヘル 新宿デリヘル 渋谷デリヘル 品川デリヘル

鶯谷デリヘル 大塚デリヘル 立川デリヘル 町田デリヘル 横浜デリヘル 埼玉デリヘル

千葉デリヘル 大阪デリヘル 神戸デリヘル 京都デリヘル 名古屋デリヘル デリヘル

アダルトレンタルサーバー アダルトレンタルサーバー 表札 断熱塗料 UGUISU

大阪 老人ホーム 京都 老人ホーム 兵庫 老人ホーム 和歌山 老人ホーム 滋賀 老人ホーム

奈良 老人ホーム 東京 老人ホーム 神奈川 老人ホーム 千葉 老人ホーム 埼玉 老人ホーム 老人ホーム