tengo el este método:Adición de valores nulos en una matriz
public function search($searchKey=null, $summary=null, $title=null, $authors=null, $paginationPage=0) {
...
}
Y estoy tratando de recuperar todos los parámetros con este:
$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);
Mi $this->params
tiene este contenido:
array
'paginationPage' => int 2
'id' => int 30
'searchKey' => string 'test' (length=4)
Como $ summary, $ title y $ authors no están presentes, obtendrán su valor predeterminado que es null
. Cuando se asigna un valor nulo a un argumento, se omitirá lo que se traduce en una matriz de parámetros $ que tiene este aspecto:
array
'searchKey' => string 'test' (length=4)
'paginationPage' => int 2
que se traducen en una llamada al método como:
public function search('test', 2, null, null, 0) {
...
}
mientras que debería be:
public function search('test', null, null, null, 2) {
...
}
Espero que veas el problema. ¿Cómo puedo asegurarme de que esos valores nulos también se pongan en mi matriz $parameters
? No es posible agregar un valor no válido, ya que es una entrada del usuario, por lo que puede ser básicamente todo.
Editar
En el ejemplo anterior el método search
está codificada. Pero una de las cosas simplificadas es que search
es realmente una variable y por eso search
puede ser cualquier cosa. Esto significa que no sé cuáles son los parámetros del método y no puedo predefinirlos antes del ciclo foreach. La solución de predefinir los parámetros es exactamente lo que debería hacer este código.
¿Qué quiere decir con * Al asignar un valor nulo a una matriz, se saltará *? Cuando agrego 'null' a una matriz, la clave está presente en la matriz: http://codepad.org/zIl0wArH –
Creo que esto fue un error tipográfico en la pregunta. Lo cambié a * Al asignar un valor nulo a un argumento *. – pts