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

Youichi Iwakiri yiwakiri @ st.rim.or.jp
2003年 12月 26日 (金) 14:09:25 JST


いわきりです

yuji koga wrote in <BC10DFB6.800B%koga-y @ mcp-net.com> :
>実は、マニュアルで"magical" PHP constantsなるものを発見し、
>http://search.net-newbie.com/php/language.constants.predefined.html
>以下のテストコードで
>
>class A{
>    function getClassName(){
>        return __CLASS__;
>    }
>}

>結果が
>a
>a
>a
>となって、打ちひしがれていた所でした。

__CLASS__でちゃんとA, B, Cが帰ってくると楽なんですけどね。


私が良くやる方法は、クラスメソッドとして呼ばれた場合は
自オブジェクトを生成して、結果を返すというものです。
PEARなんかでよく使われていたりしますが、
debug_backtrace()を使うのは、気持ち悪いですけど以下の
コードで、お望みの事ができると思います。

<?php
class A {
    var $class_name = "Class A";
    function count() {
        if (!isset($this)) {
            $array = debug_backtrace();
            $obj = new $array[0]['class'];
            return $obj->count();
        } else {
            return $this->class_name;
        }
    }
}

class B extends A {
    var $class_name = "Class B";
}

class C extends A {
    var $class_name = "Class C";
}

echo A::count() . "\n";
echo B::count() . "\n";
echo C::count() . "\n";

$b = new B;
echo $b->count() . "\n";
?>

-- 
Youichi Iwakiri



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