Foros del Web » Programando para Internet » PHP »

Parametrizar métodos

Estas en el tema de Parametrizar métodos en el foro de PHP en Foros del Web. Buenos días, He observado dos maneras de asignar parámetros a un método. El primero es el tradicional $objeto.metodo($param1, $param2, $param3){} El segundo consiste en enviar ...
  #1 (permalink)  
Antiguo 07/04/2010, 08:53
 
Fecha de Ingreso: abril-2004
Mensajes: 154
Antigüedad: 20 años
Puntos: 0
Parametrizar métodos

Buenos días,
He observado dos maneras de asignar parámetros a un método.

El primero es el tradicional

$objeto.metodo($param1, $param2, $param3){}

El segundo consiste en enviar solo un parámetro que es un array
$data = array($param1 => 'valor', $param2 => 'valor', $param3 => 'valor');
$objeto.metodo($data);

El segundo lo he visto en ambientes robustos en donde argumentan que en caso de que se necesite adicionar parámetros solo es necesario modificar el array y no es necesario modificar todos los llamados de este método en toda la aplicación, cosa que pasa en la primera opción pues es necesario adicionar o quitar parámetros sin contar con que se tiene que respetar el orden de los parámetros.

Queda abierto el debate.
Mil gracias
__________________
Desdichado quien duerme en la mañana
  #2 (permalink)  
Antiguo 07/04/2010, 09:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Parametrizar métodos

y no es la única forma, todo depende de nuestras necesidades y manera de trabajar...

Código PHP:
$objeto.metodo('param1=valor&param2=valor&...');
$objeto.metodo('param1:valor''param2:valor''...'); 
en realidad no hay una forma estándar, cada quien puede aplicar la forma que mas le convenga!! ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 07/04/2010, 09:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Parametrizar métodos

También PHP dispone de una función func_get_args() que sirve para obtener todos los parámetros con los que fue llamada una función:
Código PHP:
Ver original
  1. <?php
  2. function foo()
  3. {
  4.     $numargs = func_num_args();
  5.     echo "Number of arguments: $numargs<br />\n";
  6.     if ($numargs >= 2) {
  7.         echo "Second argument is: " . func_get_arg(1) . "<br />\n";
  8.     }
  9.     $arg_list = func_get_args();
  10.     for ($i = 0; $i < $numargs; $i++) {
  11.         echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
  12.     }
  13. }
  14.  
  15. foo(1, 2, 3);
  16. ?>
  #4 (permalink)  
Antiguo 07/04/2010, 11:02
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: Parametrizar métodos

venia a decir lo mismo q gartov, la escusa q te dieron es de alguien q no conoce el lenguaje
__________________
Degiovanni Emilio
developtus.com
  #5 (permalink)  
Antiguo 07/04/2010, 13:28
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 3 meses
Puntos: 36
Respuesta: Parametrizar métodos

Cita:
Iniciado por sofway Ver Mensaje
El segundo lo he visto en ambientes robustos en donde argumentan que en caso de que se necesite adicionar parámetros solo es necesario modificar el array y no es necesario modificar todos los llamados de este método en toda la aplicación, cosa que pasa en la primera opción
No es necesario modificar todos los llamados si se asigna un valor por default en su definición (cosa que tendría lógica).
Código PHP:
Ver original
  1. public function metodo($param1, $param2, $nuevoParam = null)
  2. {}

Además, de esta forma te permite hacer "Type Hinting", dejando al lenguaje la comprobación de que algún parámetro sea instancia de cierto objeto; utilizando un arreglo tendría que hacerse manual y definir convenciones de su uso ...


---
PD: ¿¿ $objeto.metodo() ??, ¿nadie dice nada? ...
__________________
I ♥ The Music!
  #6 (permalink)  
Antiguo 07/04/2010, 13:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Parametrizar métodos

Me imagino viene de usar Java, ya que ahí se usa esa sintaxis.

Saludos.
  #7 (permalink)  
Antiguo 07/04/2010, 13:31
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 3 meses
Puntos: 36
Respuesta: Parametrizar métodos

Cita:
Iniciado por GatorV Ver Mensaje
Me imagino viene de usar Java, ya que ahí se usa esa sintaxis.
Y Python, Ruby, JavaScript, Lua ... etc, etc, etc. Ya no sé qué es peor en cuanto a sintaxis: PERL o PHP
__________________
I ♥ The Music!
  #8 (permalink)  
Antiguo 09/04/2010, 05:21
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Parametrizar métodos

Que tal Maturano

Aunque agregues null en los parámetros, tienes la "firma" definida, si tienes que agregar más parámteros, tendrás que modificar todas las firmas de tus métodos.

Lo que se estila es un array de parámetros o un objeto de tipo parámetros cuando sabes que el método va a tener -por ejemplo- más de 3 parámetros (tampoco se justifica hacer todo con array / objetos parámtetros).

La idea es evitar tener que modificar tu firma y luego salir a modificar todas las invocaciones que existen por todo tu sistema.

PD: también ayuda que el sistema cuente con "paquetes" y "fachadas", y que las invocaciones esté contenidas en las fachadas y no directamente contra todas las clases internas de un paquete (aunque también podrías tener el mismo problema dentro del paquete con la fachada y sus clases).

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #9 (permalink)  
Antiguo 09/04/2010, 09:10
 
Fecha de Ingreso: abril-2004
Mensajes: 154
Antigüedad: 20 años
Puntos: 0
Respuesta: Parametrizar métodos

Buenos días a todos.
Gracias por sus respuestas. Al parecer no me expliqué muy bien en la pregunta.

La idea es que todos los métodos que rodean la parametrización específica ($param1, $param2, $param3), exigen que los llamados al método mantengan el orden de los parámetros, y en caso de agregar más parámetros al método, así se les asigne valor default, exigen modificar el resto de llamados, a no ser que el nuevo param sea el último.

La pregunta es entonces: Mejor utilizar siempre un parámetro objeto? (objectParam), o (arrayParam). De este modo todas las llamadas siempre serán iguales aún cuando se hagan modificaciones a los valores.

Que dices gatorv? enriqueplace?
__________________
Desdichado quien duerme en la mañana
  #10 (permalink)  
Antiguo 09/04/2010, 11:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Parametrizar métodos

Entonces creo tendrías un problema en tu diseño, la idea es que no tengas que cambiar los parámetros de tus funciones una vez que ya tienes establecido algo. Aunque si por diseño necesita esa flexibilidad por eso es que es mejor usar un array de parámetros o un objeto, aunque hay otras funcionalidades como las que te expuse.

Saludos.
  #11 (permalink)  
Antiguo 09/04/2010, 11:23
 
Fecha de Ingreso: abril-2004
Mensajes: 154
Antigüedad: 20 años
Puntos: 0
Respuesta: Parametrizar métodos

Gracias Gatorv,
Te aseguro que no es un problema de diseño. Es un problema de constante cambio por parte de los usuarios. Asumo entonces que lo mejor es parametrizar con objetos entonces.

Saludos a todos y mil gracias
__________________
Desdichado quien duerme en la mañana
  #12 (permalink)  
Antiguo 09/04/2010, 11:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
En ese caso sí es mejor hacer algo como lo que expones, y es algo que se usa mucho por ejemplo ve en Zend Framework, muchas de sus clases aceptan un objeto Zend_Config como primer parámetro.

Saludos.

Tema movido desde PHP orientado a objetos a PHP

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:21.