首页 > 解决方案 > 我在 php 中有这个函数的问题

问题描述

<?php
function loadModule($module,$action=null,$param=null){
    $access_group = $_SESSION['access_group'];
    $auth_controller = new auth();
    if($auth_controller->check_access($module,$action)){
        if (!class_exists($module)) {
            include "modules/" . $module . "/controller/controller.php";
        }

        $controller = new $module();

        if ($action) {
            if ($param) {
                return  $controller->{$action}($param);
            } else {
                return  $controller->{$action}();
            }
        } else {
            return $controller->index();
        }
    }else{
        if (!class_exists("forbidden")) {
            include_once "modules/forbidden/controller/controller.php";

        }
        $forbidden_controller = new forbidden();
        $forbidden_controller->view->render();
    }

我看到了这样的函数,我不知道第 14 行和第 16 行发生了什么,帮我解释一下。我想知道我们应该如何以及在哪里使用这种代码

标签: phpfunctionoop

解决方案


你说的是这条线:

$controller->{$action}();

这并不像看起来那么复杂。你已经习惯了普通类方法调用的语法,像这样:

$controller->getOrderNumber();

在您问题的代码中,方法名称已被变量替换。

请参见此处的示例 2

请注意,下面的两行是等效的:

$controller->{$action}();
$controller->$action();

我会非常谨慎地使用变量方法名称。它们使阅读代码和调试变得更加困难。最重要的是,它们可能会带来安全风险。


推荐阅读