1

我有两个类的代码

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

如果从类“旧”中调用方法 query(),我希望更改该变量 $fromClassOld。

类旧不能修改。

我通过使用 debug_backtrace() 并检查变量 debug_backtrace()[0]['file'] 发现了 hack,但我很确定这可以以更好的方式解决。

4

2 回答 2

1

你不能。如果你在子类上调用方法,那么你在子类上调用方法。如果您在父类上调用方法,则它无法访问子类的方法。所以你advancedQuery()从不去awesome::query(),而只是去old::query()

advancedQuery()你所能做的就是在awesome课堂上再做一个。

于 2015-01-18T19:16:39.050 回答
0

我能做的最好的事情:

$bt = debug_backtrace();
end($bt);
var_dump($bt[key($bt)]['class']);
于 2015-01-18T20:32:39.763 回答