2010-12-02 3 views
5

У меня есть этот метод:Добавление нулевых значений в массив

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. Решение предопределения параметров на самом деле именно то, что должен делать этот код.

+0

Что вы подразумеваете под * При назначении нулевого значения массиву оно будет пропущено *? Когда я добавляю `null` в массив, ключ присутствует в массиве: http://codepad.org/zIl0wArH – 2010-12-02 08:42:17

ответ

0

Ой ... Это было просто опечатка:

... 
} elseif($Parameter->isDefaultValueAvailable()) { 
    $paramaters[$Parameter->name] = $Parameter->getDefaultValue(); 
} else { 
... 

Позор мне!

6

Как о предварительной инициализации $parameters перед входом в цикл foreach:

$parameters = array(
    $searchKey => null, 
    $summary => null, 
    $title => null, 
    $authors => null, 
    $paginationPage => 0 
); 
Смежные вопросы