Добавление значений 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) {
...
}
надеюсь, вы видите проблему. Как я могу убедиться, что эти значения null также помещены в my $parameters
массив. Добавление недопустимого значения невозможно, потому что это пользовательский ввод, так что это может быть в основном все.
редактировать
в примере выше метод search
жестко. Но одна из упрощенных вещей заключается в том, что search
на самом деле является переменной и из-за это search
может быть что угодно. Это означает, что я не знаю, какие параметры метода и я не могу предопределить их до цикла foreach. Решение предопределения параметров на самом деле именно то, что должен делать этот код.
2 ответов
как насчет предварительной инициализации $parameters
перед входом в foreach
петли:
$parameters = array(
$searchKey => null,
$summary => null,
$title => null,
$authors => null,
$paginationPage => 0
);
О мой... Это была просто опечатка:--2-->
...
} elseif($Parameter->isDefaultValueAvailable()) {
$paramaters[$Parameter->name] = $Parameter->getDefaultValue();
} else {
...
позор мне!