[PHP-users 19579]Re: インスタンスの生成無しで利用するクラスメソッド内から、同クラスの他メソッド・プロパティを利用する方法について

komura komura @ ma9.seikyou.ne.jp
2003年 12月 25日 (木) 17:36:48 JST


komura です。

関数の使い方としては、使用目的が違っていますので、全くお薦めはしませんが、
参考までに、ということで投稿します。


On Thu, 25 Dec 2003 14:38:13 +0900
yuji koga <koga-y @ mcp-net.com> wrote:

> userクラスが参照するテーブルはuser_tbl、goodsクラスが参照するテーブルは
> goods_tblと、命名規則は合わせておりますので、もしここで子クラスの
> クラス名を得ることさえできれば、実はこの部分すら親クラス内に
> 書けてしまうのでは?と淡い期待を抱いていたのです。


PHP 4.3.0 以降であれば(PHP 4.3.4 で確認)、以下のように
debug_backtrace() を使用することで呼び出し元の子クラスの名前が取得
できるようです。

class A {
    var $tableName;

    function count() {
        $array = debug_backtrace();
//      print_r( $array );
        echo $array[0]['class'] . "\n";
    }
}

class goods extends A {
    var $tableName = 'goods_tbl';
}

class user extends A {
    var $tableName = 'user_tbl';
}

goods::count();
user::count();

// 結果(PHP 4.3.4)
goods
user

ただし、PHP5 beta3 で確認したところ、以下のように違う結果になります。

a
a

debug_backtrace() が返すクラス名はどのような結果になるのかについては
マニュアルを見た限りでは分かりませんので、PHP のバージョンが
上がったときに、問題になる可能性があります。

-- 
komura <komura @ ma9.seikyou.ne.jp>


PHP-users メーリングリストの案内