php - 我在 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 行发生了什么,帮我解释一下。我想知道我们应该如何以及在哪里使用这种代码
解决方案
你说的是这条线:
$controller->{$action}();
这并不像看起来那么复杂。你已经习惯了普通类方法调用的语法,像这样:
$controller->getOrderNumber();
在您问题的代码中,方法名称已被变量替换。
请参见此处的示例 2。
请注意,下面的两行是等效的:
$controller->{$action}();
$controller->$action();
我会非常谨慎地使用变量方法名称。它们使阅读代码和调试变得更加困难。最重要的是,它们可能会带来安全风险。
推荐阅读
- python-3.x - 字节和 base64 格式 (Python3)
- python - Python3:自定义排序
- google-cloud-platform - GCE 仅显示 ~15% 的使用率,但顶部显示 ~99%
- c - 如何使 SDL_ttf 与 SDL2 一起工作?
- javascript - 为什么 JS 不从 Jinja 读取数据?
- javascript - 为什么我的汉堡菜单在单击时没有打开?
- c++ - unique_ptr
构造函数要求 Deleter 不抛出 - python - 线性回归速度增加
- python - 使用 numpy 查找 True 值垂直和水平连接的索引
- java - 为什么在 c++ 库崩溃应用程序中将 java long 作为指向结构的指针传递?