[PHP-users 31121] Re: メソッドの静的呼び出しについて
Ihara Shinyo
shinyo @ ihara-inc.com
2006年 12月 25日 (月) 18:06:31 JST
伊原といいます。
On 2006/12/25, at 10:10, bobchin wrote:
> 継承先で親クラスのメソッドを静的に呼び出した際に、
> 親クラス側で呼び出し元を特定できないかを考えていますが、
> よい方法が浮かびません。
> なにかヒントがあればと思い、投稿しました。
>
> やりたいことは以下の通りです。
>
> class ClassA {
> function method()
> {
> // ここで「ClassB」を取得したい・・・
> }
> }
>
> class ClassB extends ClassA {
> }
>
> ClassB::method()を呼び出したときに、親クラスClassA上で
> 「ClassB」から
> コールされたことを判断る方法(呼び出しもとのクラスが知りたい)
> です。
私も同様のことを実現したくて困っています。
派生クラスでstaticなメソッドをオーバライドすることで、
一応、親クラスで派生クラス名を取得することができました。
ただ、派生クラス毎にオーバライドしないといけないので、
あまり嬉しくありません。バージョンはPHP 5.2 + FreeBSD 6.1
です。
<?php
class A
{
public static function f()
{
$bt = debug_backtrace();
$class = $bt[1]['class'];
echo $class;
}
}
class B extends A
{
public static function f()
{
parent::f();
}
}
B::f();
?>
個人的にはdebug_backtraceの動作がおかしいのでは?と思いま
す。
Bug #30828 (http://bugs.php.net/bug.php?id=30828)によると
5.0で対策済みのはずなんですけど、
5.1辺りの object を返すようにした変更でまた問題が表面化し
たんでしょうか。
以上、ご参考まで。
PHP-users メーリングリストの案内