Ver Mensaje Individual
  #12 (permalink)  
Antiguo 16/07/2013, 19:03
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: variables globales dentro de funciones..

Cita:
Iniciado por metacortex Ver Mensaje
... estoy resolviendo el asunto de los parámetros con un pequeño método que compartí en el foro hace tiempo, el cual permite colocarlos en cualquier orden -y hasta de manera más amigable- al invocar la función: http://www.forosdelweb.com/f18/aport...dpress-906484/
Me parece bien, esa solucion que encontrastes para vos tiene una Gran ventaja y es que puedes hacer un Search&Replace en algun editor que soporte expresiones regulares como el Notepad++ para las llamadas a esas funciones y solucionar facil tu problema en 5 min a nivel de todo tu codigo. EXCELENTE SOLUCION !!!

Otra forma (la mas usual) de no liarse con el orden de parametros es enviando un array asociativo de los mismos

Supon tenias esto:

Código PHP:
Ver original
  1. function hablar()
  2. {    
  3.     global $sujeto, $accion, $articulo, $objeto;
  4.  
  5.     $articulo = isset($articulo) ? $articulo : null;
  6.  
  7.         return "$sujeto $accion $articulo $objeto";
  8. }
  9.  
  10. $sujeto = 'I';
  11. $accion = 'will eat';
  12. $articulo = 'a';
  13. $objeto = 'cookie';
  14.  
  15. echo hablar();

Fijate lo facil que la adapto:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function hablar ($p)
  4. {    
  5.     if  (!is_array($p)  || (count($p)<3) || (count($p)>4) )
  6.         Throw new InvalidArgumentException("Parametros estan mal en ".__FUNCTION__);
  7.  
  8.     extract($p);  // convierto array en algo retro-compatible
  9.  
  10.     // DE AQUI para abajo tu funcion no cambia en nada ***
  11.     $articulo = isset($articulo) ? $articulo : null;
  12.  
  13.         return "$sujeto $accion $articulo $objeto";
  14. }
  15.  
  16. echo hablar (array('articulo'=>'a','objeto'=>'cookie','sujeto'=>'I','accion'=>'will eat'));

Al mini-chequeo no le des importancia.... solo verifico que sea un array() y que tenga entre 3 y 4 "parametros" puesto que uno de ellos es opcional (articulo)

*** Tu funcion puede tener como invariante "todo" excepto las primeras lineas o primera linea,.. el extract() aunque si tu necesitas devolver "algo" haras un return
__________________
Salu2!

Última edición por Italico76; 17/07/2013 a las 05:31