[Php-objetos] Parametros de un metodo

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Mar Feb 10 23:56:46 ART 2009


Hola Gerardo,

El mar, 10-02-2009 a las 22:11 -0300, Gerardo Valiani escribió:
> Suporongamos que tengo este metodo: public function
> myMetodo($valor1=false, $valor2=false);

	Ok.

> Me hincha un poco los cocos al momento de pasarle los parametros.
> Porque si quiero pasarle solo el $valor2, no puedo sin pasarle
> $valor1. Es decir no puedo hacer: myMetodo($valor2); Porque ese valor
> me lo va a tomar para $valor1. Asi que debo hacer por lo menos
> myMetodo(false, $valor2); No estoy diciendo nada nuevo.

	No es algo nuevo, de veras ;-)
	El tema es que si ponés los argumentos del mensaje (la palabra
"parámetros" es de otro paradigma de programación) en un orden piola, la
mayoría de las veces la llamada es cómoda, y algunas como bien decís, te
verás forzado a pasarle el 1ro para poder pasarle el 2do.

	Esta discusión tiene sentido si esperás un 50% de solo uno y solo el
otro, ya que si tenés que pasar los 2, pues van los 2 siempre.

	Sigamos:

>  La pregunta
> viene a continuacion. Investigando como hacer para pasarle solo los
> parametros que uno quiere y que el metodo sepa que le estoy pasando.
> Se me ocurrio que podia hacer que todos los metodos solo reciban un
> solo parametro de tipo array y que dentro del metodo, convierto el
> array en variables con un extract(). Entonces yo podria hacer
> myMetodo(array('valor2'=>'algo'));
> 
> El metodo seria:
> public function myMetodo($parametros){
>      extract($parametros);
>      //resto del script;
> }
> 
> Tambien se me ocurrio que los metodos podrian recibir un solo
> parametro de tipo string y parsearlo dentro de los metodos. Pero me
> parece mejor idea lo del extract.
> 
> Si bien en la practica esto funcionaria. Esta bien o no?

	El tema que planteas es interesante, pero te ganás otros problemas con
esta solución.
	Por una parte, en Objetos "no existe" el vector, así que hay que tener
cuidado de cómo se usa para no agarrar para cualquier lado. Tenemos un
equivalente en una colección.

	Por otra parte, tu extract() tiene que tener la capacidad de por la
semántica del argumento saber a qué atributo corresponde para invocar al
setter. Cómo resolvés el problema de recibir un elemento de un vectos
con una clave incorrecta o con una clave correcta pero un valor
incorrecto? 

	El matching y las validaciones me parece que dan más trabajo que llamar
al contructor con los parámetros ... aunque tengas que llamarlo siempre
con todos !!!!

> Saludos!

	=mente!
-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-objetos