У меня есть код двух классов
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’], но я уверен, что это можно решить лучше.
Ты не можешь. Если вы вызываете метод для дочернего класса, то вы вызываете метод для дочернего класса. Если вы вызываете метод в родительском классе, он не имеет доступа к дочерним методам. Так что ваши advancedQuery()
никогда не идет к awesome::query()
, но только для old::query()
Все, что вы можете сделать, это сделать еще один advancedQuery()
в awesome
учебный класс.
Лучшее, что я мог сделать:
$bt = debug_backtrace();
end($bt);
var_dump($bt[key($bt)]['class']);