阻止从上下文调用实例方法X!= Y.

时间:2010-04-08 15:00:58

标签: php scope visibility

这是一个棘手的问题。

我正在“模仿”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();
 }

2 个答案:

答案 0 :(得分:1)

要确定称为特定方法的“内容”,请查看debug_backtrace

答案 1 :(得分:0)

发布脚本: 我的原始代码的问题是设计错误。迭代Bootstrap方法的责任应该是给调用类,而不是目标类本身。 我通过将函数移动到调用者来解决了这个问题。事后看来,有趣的是多么明显/简单的重构......