我正在尝试设置一个数组来拉动文件名和函数名来运行,但它没有完全正常工作。
代码是
$actionArray = array(
'register' => array('Register.php', 'Register'),
);
if (!isset($_REQUEST['action']) || !isset($actionArray[$_REQUEST['action']])) {
echo '<br><br>index<br><br>';
echo '<a href="?action=register">test</a>';
exit;
}
require_once($actionArray[$_REQUEST['action']][0]);
return $actionArray[$_REQUEST['action']][1];
Register.php有
function Register()
{
echo 'register';
}
echo '<br>sdfdfsd<br>';
但它不会回显寄存器而只是sdfdfsd。
如果我从
更改第一批代码return $actionArray[$_REQUEST['action']][1];
到
return Register();
它有效,有什么想法吗?
由于
答案 0 :(得分:4)
将最后一行更改为:
return call_user_func($actionArray[$_REQUEST['action']][1]);
这使用call_user_func函数获得更易读的代码和更好的可移植性。以下也应该有效(仅在PHP 5.4上测试)
return $actionArray[$_REQUEST['action']][1]();
它与您的代码几乎相同,但我实际上是调用函数而不是返回数组的值。如果没有函数调用语法()
,您只需要让PHP获取变量的值(在本例中为数组)并返回它。
答案 1 :(得分:0)
你会在这里找到有用的东西: How to call PHP function from string stored in a Variable
调用存储在字符串中的函数名称就是你想要的......