【发布时间】:2015-01-18 19:12:17
【问题描述】:
我有两个类的代码
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,但我很确定这可以通过更好的方式解决。
【问题讨论】:
-
简单的答案 - 没办法。另一个问题 - 你需要这个做什么?
-
您说您无法更改
class old的行为,但实际上您正在尝试在子类中更改它。您可以告诉它在子类的扩展方法中采取不同的操作,但根据定义,如果您在父类中使用类似的方法,则不能调用子类中的代码。 -
哇,我很惊讶这无法完成。我正在替换项目中的旧数据库类。但我想保持旧功能。主要问题新旧类有方法 query() 但它的功能不同。
标签: php class-extensions