PHP проверяет, вызван ли метод из расширенного класса

У меня есть код двух классов

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

Я хочу, чтобы эта переменная $ fromClassOld была изменена, если метод query () вызывается из класса ‘old’.

Класс старый не может быть изменен.

Я нашел взлом, используя debug_backtrace () и проверив переменную debug_backtrace () [0] [‘file’], но я уверен, что это можно решить лучше.

1

Решение

Ты не можешь. Если вы вызываете метод для дочернего класса, то вы вызываете метод для дочернего класса. Если вы вызываете метод в родительском классе, он не имеет доступа к дочерним методам. Так что ваши advancedQuery() никогда не идет к awesome::query(), но только для old::query()

Все, что вы можете сделать, это сделать еще один advancedQuery() в awesome учебный класс.

1

Другие решения

Лучшее, что я мог сделать:

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