Добавление нулевых значений в массив

У меня есть этот метод:

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 и Авторы $ отсутствуют, они получат значение по умолчанию, равное 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 . Добавление недопустимого значения невозможно, потому что это вводится пользователем, так что это может быть практически все.

Edit

В приведенном выше примере метод search жестко запрограммирован. Но одно из упрощений состоит в том, что поиск на самом деле является переменной, и поэтому поиск может быть любым. Это означает, что я не знаю, каковы параметры метода, и не могу предопределить их перед циклом foreach. Решение предопределения параметров - это именно то, что должен делать этот код.

6
задан Rene Terstegen 3 December 2010 в 09:13
поделиться