时间:2016-01-19 10:25:04

标签: php console

我遇到了问题。我目前面临一个问题:我有一个控制台php脚本,它从用户输入执行一个功能。我有一个名为DefaultModelFactory的类,它有一个静态函数createSchema。当我var_dump(get_class_methods('DefaultModelFactory'))时,我得到以下输出:

array(1) {
[0]=>
string(12) "createSchema"
}

用户输入为DefaultModelFactory,createSchemaexplode(',', fgets(STDIN))然后我为参数打开一个新的STDIN,我也会爆炸,','然后将这些输入传递给此函数:

function executeCommand($commandName, array $options){
    if(is_array($commandName)){
        if(method_exists($commandName[0],$commandName[1])){

            call_user_func_array(implode('::', $commandName), $options);
        }
        else{
            throw new InvalidArgumentException(sprintf("The function %s::%s does not exist!", $commandName[0], $commandName[1]));
        }
    }
    else{
        if(function_exists($commandName)){
            call_user_func_array($commandName, $options);
        }
        else{
            throw new InvalidArgumentException(sprintf("The function %s does not exist!", $commandName));
        }
    }
}

问题是,抛出了异常。我还检查了php错误:

  

PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'DefaultModelFactory' does not have a method 'createSchema ' in C:\xampp\htdocs\wwwcapi\console.php on line 15

可以在here

检查console.php的完整代码

1 个答案:

答案 0 :(得分:3)

当您使用var_dump($commandName)时,您会看到:

array(2) {
  [0]=>
  string(19) "DefaultModelFactory"
  [1]=>
  string(13) "createSchema
"
}

注意索引1处的换行符,输入用户命中也会发送到PHP。 call_user_func_array()然后尝试执行函数createSchema\n,这当然不存在。因此,请移除换行符以及用户可能输入的任何其他不需要的空格,或粘贴trim()

explode( ',', trim( fgets( STDIN ) ) );