调用之前执行的数组函数

时间:2016-02-08 00:50:29

标签: php arrays function

我有一个这样的数组:

$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');
}

但是我仍然会得到与之前被调用相同的错误。

1 个答案:

答案 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已设置或可以检索,并且如果它没有某种方法来处理它。