获取所有方法

时间:2015-10-21 09:35:32

标签: php authentication

我试图在PHP框架中构建基于角色的访问控制。该框架在MVC架构上,因此每条路径都适用于/controller/action/param。我们可以在初始化时获得控制器和操作,并将它们存储在变量$ controller,$ action中。现在我的想法是使用一个类来检查这个动作的权限,如:

Auth::permissions($controller, $action);

现在我希望我能以某种方式创建一个脚本,它可以在/ modules /文件夹中找到控制器的所有公共方法。这样我就可以运行一个脚本,它会将所有控制器操作作为列表更新到数据库,我们将从中获取角色权限。这样我就可以避免手动插入所有控制器操作。获取所有控制器非常简单,因为文件夹结构如下:

/modules
    /controller
        controller.php

所以我可以找到模块上的所有子目录,最后添加.php。 我的问题是我可以以某种方式获取文件的公共方法吗?

class Example extends Controller {
    public function main() {
        return 'foo';
    }
}

这样我可以将其作为

存储在数据库中
example | main | role_id

3 个答案:

答案 0 :(得分:1)

以下是一些可以帮助您的代码:

<?php
class Example {
    public function main() {
        return 'foo';
    }
    private function privatefunc(){
    }
    public function anotherpublicfunc(){
    }
}


$reflector = new ReflectionClass("Example");

foreach($reflector->getMethods() as $method){
    if($method->isPublic()) {
        echo "Method ".$method->name." is public".PHP_EOL;
    }else{
        echo "Method ".$method->name." is not public".PHP_EOL;
    }
}
?>

输出:

Method main is public
Method privatefunc is not public
Method anotherpublicfunc is public

答案 1 :(得分:0)

如果您想获取课程的公开方法,那么您可以使用get_class_methods阅读doc here

class Car {

    public function permission_method_two() {

    }

    public function permission_method_three() {

    }

    private function private_function() {

    }

}

echo '<pre>'.print_r(get_class_methods('Car'),1).'</pre>';
// prints only public methods:

Array
(
    [0] => permission_method_two
    [1] => permission_method_three
)

答案 2 :(得分:0)

您可以遵循惯例: - 每个公共方法都没有低位启动 - 每个私有和受保护的方法都以lowdash

开头

实施例

class Example
{
   public function publicMethod()
   {
   }

   private function _privateMethod()
   {
   }

   protected function _protectedMethod()
   {
   }

}

然后使用http://php.net/manual/ru/function.get-class-methods.php

foreach(get_class_methods('Example') as $methodName){
   if(strpos($methodName, '_') !== 0) $publicMethod[] = $methodName; 
}