将空值添加到数组

时间:2010-12-02 08:33:11

标签: php arrays reflection null

我有这个方法:

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循环之前预先定义它们。预定义参数的解决方案实际上就是这段代码应该做的事情。

2 个答案:

答案 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 {
...

羞辱我!