У меня есть этот метод:Добавление нулевых значений в массив
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
. При назначении нулевого значения аргумента, он будет пропущен, что приводит в массиве $ параметров, который выглядит следующим образом:
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. Решение предопределения параметров на самом деле именно то, что должен делать этот код.
Что вы подразумеваете под * При назначении нулевого значения массиву оно будет пропущено *? Когда я добавляю `null` в массив, ключ присутствует в массиве: http://codepad.org/zIl0wArH – 2010-12-02 08:42:17