我有这个方法:
public function search($searchKey=null, $summary=null, $title=null, $authors=null, $paginationPage=0) {
...
}
我正试图用这个检索所有参数:
$Class = new Search();
// Get parameters
$ReflectionMethod = new \ReflectionMethod($Class, "search");
try {
foreach($ReflectionMethod->getParameters() AS $Parameter) {
if(array_key_exists($Parameter->name, $this->params)) {
$parameters[$Parameter->name] = $this->params[$Parameter->name];
} elseif($Parameter->isDefaultValueAvailable()) {
$paramaters[$Parameter->name] = $Parameter->getDefaultValue();
} else {
...
}
} catch(\Exception $e) {
...
}
// Call function
return call_user_func_array(array($Class, "search"), $parameters);
我的$this->params
有以下内容:
array
'paginationPage' => int 2
'id' => int 30
'searchKey' => string 'test' (length=4)
因为$ summary,$ title和$ authors不存在,所以它们将获得默认值null
。为参数分配空值时,将跳过它,这将导致$ parameters数组看起来像这样:
array
'searchKey' => string 'test' (length=4)
'paginationPage' => int 2
这导致方法调用如:
public function search('test', 2, null, null, 0) {
...
}
虽然它应该是:
public function search('test', null, null, null, 2) {
...
}
希望你看到问题所在。如何确保将这些空值也放入我的$parameters
数组中。无法添加无效值,因为它是用户输入,因此基本上可以是所有内容。
修改
在上面的示例中,方法search
是硬编码的。但其中一个简单的事情是search
实际上是一个变量,因为search
可以是任何东西。这意味着我不知道方法的参数是什么,我不能在foreach循环之前预先定义它们。预定义参数的解决方案实际上就是这段代码应该做的事情。
答案 0 :(得分:6)
如何在进入$parameters
循环之前预先初始化foreach
:
$parameters = array(
$searchKey => null,
$summary => null,
$title => null,
$authors => null,
$paginationPage => 0
);
答案 1 :(得分:0)
哦,我的......这只是一个简单的错字:
...
} elseif($Parameter->isDefaultValueAvailable()) {
$paramaters[$Parameter->name] = $Parameter->getDefaultValue();
} else {
...
羞辱我!