我有一个这样的数组:
$cmds = array(
'info' => call_user_func('_info', $cmd1),
'e1' => 'something'
);
func本身:
function _info($cmd1){
if(strlen($cmd1) < 2){
die('Invalid Username');
}else{
echo 'cmd1 > 2';}
}
问题是它在我调用它之前执行是否给出了未定义的变量错误,因为$cmd1
尚不存在,当我在foreach
函数中调用它时它将存在。
一直在寻找解决方案几个小时但没有找到。
我尝试将array
设置为此'info' => _info($cmd1)
和'info' => '_info'
,并将$cmd1
直接放入func中,如下所示
function _info(){
if(strlen($cmd1) < 2){die('invalid');
}
但是我仍然会得到与之前被调用相同的错误。
答案 0 :(得分:1)
您可以发送稍后要执行的参数
$cmds = array(
'info' => [ '_info', '$cmd1' ], // single quotes
'e1' => 'something'
);
同时定义了cmd1
$cmd1 = "hello";
foreach ($cmds as $key => $cmdset) {
if (!is_array($cmdset)) {
// do something with e1 => something
} else {
$function = array_shift($cmdset);
foreach ($cmdset as &$param) {
// Only variables are treated below, values are passed through as is
if (stripos($param, '$') === 0) {
// Remove $
$cmd1 = substr($param, 1);
// Set param to the value of cmd1
$param = $$param; // variable varaible $$
}
}
call_user_func_array($function, $cmdset);
}
}
虽然这样做但这样做真是不好的做法。取决于变量函数,如果设置与否则不清楚。代码很难理解。
您应该考虑另一种解决方案,您可以确保$cmd1
已设置或可以检索,并且如果它没有某种方法来处理它。