【问题标题】:Checking method visibility in PHP检查 PHP 中的方法可见性
【发布时间】:2011-02-28 05:24:40
【问题描述】:

有什么方法可以检查一个类方法是被声明为私有的还是公有的?

我正在开发一个控制器,其中 url 映射到类中的方法,并且我只想在它们被定义为公共时触发这些方法。

【问题讨论】:

    标签: php oop class methods visibility


    【解决方案1】:

    【讨论】:

    • 你也可能(也许)想要检查 final/static/abstract。
    【解决方案2】:

    为了扩展 Safraz Ahmed 的答案(因为 Reflection 缺少文档),这是一个简单的示例:

    class foo {
        private function bar() {
            echo "bar";
        }
    }
    
    $check = new ReflectionMethod('foo', 'bar');
    
    echo $check->isPrivate();
    

    【讨论】:

      【解决方案3】:

      让我们从另一边看。您实际上并不需要知道方法的可见性级别。您需要知道是否可以调用该方法。 http://lv.php.net/is_callable

      if(is_callable(array($controller, $method))){
        return $controller->$method();
      }else{
        throw new Exception('Method is not callable');
        return false;
      }
      

      【讨论】:

      • 这是目前提供的最自然的解决方案。
      • 是的,非常好的建议。问题是虽然所有方法都在当前类中,所以它们都是可调用的、私有的或公共的,所以我在这里通过只允许从 url 运行公共方法来创建自己的可见性。但故事的一部分也是我发现__destruct 等需要公开,因此可以通过 url 调用,所以现在我选择了一个带有方法前缀 (action_) 的组合。
      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多