[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 メーリングリストの案内