我遇到了问题。我目前面临一个问题:我有一个控制台php脚本,它从用户输入执行一个功能。我有一个名为DefaultModelFactory
的类,它有一个静态函数createSchema
。当我var_dump(get_class_methods('DefaultModelFactory'))
时,我得到以下输出:
array(1) {
[0]=>
string(12) "createSchema"
}
用户输入为DefaultModelFactory,createSchema
我explode(',', 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的完整代码答案 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 ) ) );