2010-12-02 18 views
5

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.

+0

¿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 –

+1

Creo que esto fue un error tipográfico en la pregunta. Lo cambié a * Al asignar un valor nulo a un argumento *. – pts

Respuesta

0

Oh ... que era sólo un simple error tipográfico:

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

La culpa es mía!

6

¿Qué hay de pre-inicialización $parameters antes de entrar en el bucle foreach:

$parameters = array(
    $searchKey => null, 
    $summary => null, 
    $title => null, 
    $authors => null, 
    $paginationPage => 0 
); 
Cuestiones relacionadas