【问题标题】:is it possible to change method property from public to private and back on runtime from inside class?是否可以从类内部将方法属性从公共更改为私有并在运行时返回?
【发布时间】:2011-03-18 01:05:14
【问题描述】:

像这样: if ($sth) make_private($this->method);

或者可能有其他方式影响方法的可访问性?

问题是我写了一个类,其中方法必须调用一次,所以我需要代码来限制在执行此方法后从类外部访问给定方法。

【问题讨论】:

    标签: php oop properties methods


    【解决方案1】:

    在方法中执行此操作的简单方法(仅限一次调用):

    public function fooBar() {
         static $called;
         if (isset($called)) throw new Exception('Called already once!');
         $called = true;
    
         // your code
    }
    

    【讨论】:

      【解决方案2】:

      您有几个更好的选择:

      1. 用类本身的一些静态变量处理“只能调用一次”,并抛出清晰的异常。
      2. 如果您无法更改类/对象本身,请使用装饰器对象处理“只能调用一次”。

      您建议的非常不受欢迎的方式是可能的,请参阅 classkit_method_redefinerunkit_method_redefine,但代表将来可能在您的代码上工作的任何人:请不要使用它。

      【讨论】:

        猜你喜欢
        • 2012-10-09
        • 1970-01-01
        • 2012-05-17
        • 1970-01-01
        • 2014-01-03
        • 1970-01-01
        • 2011-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多