这是一个棘手的问题。
我正在“模仿”ZF Bootstrapping(表面外观)。不要问我为什么,称之为学术兴趣。所以我有一个带有“run”方法的Bootstrap Abstract,它迭代自己以找到前缀为“init”的任何方法。
应用程序查找扩展此类的用户定义类,用户可以通过这种方式定义任意数量的方法。但是,我想阻止用户能够执行它的父类的“run”命令,同时仍然为客户端代码公开相同的命令。
class Bootstrap_Abstract{
protected final function run(){
// if method exists that starts 'init' - execute the method
}
}
class Bootstrap extends Bootstrap_Abstract(){
public function initSomething(){
//do something
}
//PREVENT THIS
public function initRun(){
$this->run();
}
}
//application code, not exposed to user - changes in behaviour require changes in this code directly
class Application(){
$Bootstrap = new Bootstrap();//load user bootstrap
$Bootstrap->run();
}
答案 0 :(得分:1)
要确定称为特定方法的“内容”,请查看debug_backtrace
答案 1 :(得分:0)
发布脚本: 我的原始代码的问题是设计错误。迭代Bootstrap方法的责任应该是给调用类,而不是目标类本身。 我通过将函数移动到调用者来解决了这个问题。事后看来,有趣的是多么明显/简单的重构......