检查PHP中的方法可见性

pho*_*bia 8 php oop methods visibility class

有没有办法检查类方法是否已声明为私有或公共?

我正在使用一个控制器,其中url映射到类中的方法,我只想触发方法,如果它们被定义为public.

Mat*_*iva 9

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

class foo {
    private function bar() {
        echo "bar";
    }
}

$check = new ReflectionMethod('foo', 'bar');

echo $check->isPrivate();
Run Code Online (Sandbox Code Playgroud)


Anp*_*her 5

让我们从另一边看。你真的不需要知道方法的可见性级别。您需要知道是否可以调用该方法。 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,非常好的建议。问题是所有方法都在当前类中,所以它们都是可调用的、私有的或公共的,所以我在这里通过只允许从 url 运行公共方法来创建我自己的可见性。但故事的一部分还在于我发现`__destruct` 等需要公开,因此可以通过 url 调用,所以现在我选择了一个带有方法前缀 (action_) 的组合。 (2认同)