PHP检查从扩展类调用的方法

时间:2015-01-18 19:12:18

标签: php class-extensions

我有两个类的代码

class old{
    function query(){
        #do some actions ...
    }

    function advancedQuery(){
        #some actions and then
        $this->query();
    }
}

class awesome extends old{
   function query(){
        parent::query();

        $fromClassOld = false; # this variable must be changed if method is called from class 'OLD'
        if( $fromClassOld ){
            echo 'foo ';
        }else{
            echo 'bar ';
        }
   }
}

然后像这样的一些用法

$awesome = new awesome();
$awesome->query(); # should return 'bar'
$awesome->advancedQuery(); # should return 'foo'

您可以在此处查看代码http://goo.gl/Gq63Wk

如果从类'old'调用方法query(),我希望改变$ fromClassOld变量。

类旧的不能被修改。

我通过使用debug_backtrace()和检查变量debug_backtrace()[0] ['file']找到了hack,但我确信这可以通过更好的方式解决。

2 个答案:

答案 0 :(得分:1)

你做不到。如果在子类上调用方法,则在子类上调用方法。如果在父类上调用方法,则它无法访问子方法。因此,advancedQuery()永远不会转到awesome::query(),而只转到old::query()

您所能做的就是在advancedQuery()课程中再创建一个awesome

答案 1 :(得分:0)

我能做的最好的事情:

$bt = debug_backtrace();
end($bt);
var_dump($bt[key($bt)]['class']);