首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在类构造函数中找到被调用的方法名?

在类构造函数中找到被调用的方法名?
EN

Stack Overflow用户
提问于 2017-06-12 16:16:01
回答 1查看 1.7K关注 0票数 2

可以从__construct()函数获取类中被调用方法的名称吗?

我有一个MVC应用程序,其中用户有权限,对于用户来说,要访问控制器(类)中的特定路由(方法)--他们必须具有某些权限--我想在控制器的构造函数方法中定义这些权限,因为我不想用重复的代码干扰控制器,只是为了检查用户在每个方法中是否有特定的权限。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-12 17:20:10

可以从__construct()函数获取类中被调用方法的名称吗?

不是的。在调用方法时不调用构造函数,在创建对象实例时调用构造函数。因此,当您调用该方法时,构造函数已经完成。

我想在控制器的构造函数方法中定义,因为我不想用重复的代码来干扰控制器,只是为了检查用户在每个方法中是否有一定的权限。

在本例中,您可以创建一个执行权限检查的protected函数,然后从每个公共路由方法调用该函数:

代码语言:javascript
运行
复制
class Controller
{

    protected function checkPermissions($route)
    {
        // ...
    }

    public function someRoute()
    {
        $this->checkPermissions(__METHOD__);
        // ...
    }

    public function someOtherRoute()
    {
        $this->checkPermissions(__METHOD__);
        // ...
    }

}

或者更好的是,您可能有一些其他代码可以自动实例化Controller对象,然后查找要触发的正确方法。如果是这样的话,您可以添加调用来检查该代码块的权限,然后您就根本不需要接触路由方法了:

代码语言:javascript
运行
复制
$controllerName = // determined by analyzing URL;
$routeName = // determined by analyzing URL;
if (!class_exists($controllerName)) {
    throw new Exception('no such controller');
}
$controller = new $controllerName();
if (!method_exists($controller, $routeName)) {
    throw new Exception('no such route in controller');
}
$controller->checkPermissions($routeName);
$controller->$routeName();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44504136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档