Ver Mensaje Individual
  #10 (permalink)  
Antiguo 15/07/2013, 17:58
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..

En mi opinion hay cuestiones mas criticas pero esto te puede joder en el sentido de que podria haber colisiones entre distintas librerias / archivos

Si te llegara a pasar... que empiezan a colisionar tus "paquetes", podrias usar Namespace que pues restringiria un poco el alcance de las variables globales. Ya no serian "globales"

Ejemplo: supongamos tienes una libreria... llamada hello_lib.php y tiene variables globales pero tu quieres restringir el impacto a los archivos que sabes la usan porque casualmente tu tienes una funcion que se llama igual en otra libreria u archivo, digamos es la funcion saludar()

// Archivo # 1 que incluye la funcion saludar()

Código PHP:
Ver original
  1. <?php
  2. Namespace Cortesia;  // Incluyes esta linea
  3.  
  4. function saludar(){
  5.     global $saludo;
  6.     $saludo = 'Hola Mundo';
  7. }

Y... preciso tienes otro archivo... que tiene la misma funcion... digamos que este segundo archivo INCLUYE al primero, pero ambos podrian ser incluidos por un tercero... etc

// Archivo # 2 que estamos de malas e incluye la misma funcion saludar() ... observa que fue necesario definir varios "espacios" de trabajo para evitar las colisiones

Código PHP:
Ver original
  1. <?php
  2. Namespace Cortesia {
  3.     Include "hello_lib.php";
  4. }
  5.  
  6. // Espacio de trabajo "Global" ... es como decir que no pertenece a nigun Namespace
  7. Namespace {
  8.     // Otra funcion que se llama saludar y colisionaria
  9.     function saludar($nombre){    
  10.         return "Hola $nombre";
  11.     }
  12. }
  13.  
  14. Namespace Cortesia {
  15.     saludar();  
  16.     echo $saludo;
  17. }


Veamos:

1) Las funciones (podrian ser clases) se pueden llamar igual.. pero la implementacion distinta o no tener nada que ver pero tener el mismo nombre

2) Tu podrias querer "renombrar" la funcion y tener en cuenta todas sus dependientes (donde la llamas) pero... si la o las librerias son "comerciales" ? renombrando estaras en mas problemas porque tu codigo se volvera mucho mas incompatible al momento de actualizarlas.

3) Podras decir...y por que colocas tantos espacios de bloque Namespace ? sera que puedo quitarle el Namespace al include ? RTA: nope. Ese no porque los archivos que tengan Namespace deben comenzar como primera clausula con un Namespace justamente!

Curiosidad... el Namespace "global" equivale a no tenerlo... excepto que aplica la regla de arriba... entonces el codigo que teniamos antes equivale a:

Código PHP:
Ver original
  1. <?php
  2. Namespace Cortesia {
  3.     Include "hello_lib.php";
  4. }
  5.  
  6. // ACA estaba el NAMESPACE GLOBAL  (pero lo quite)
  7.  
  8.     // Otra funcion que se llama saludar y colisionaria
  9.     function saludar($nombre){    
  10.         return "Hola $nombre";
  11.     }
  12.  
  13.  
  14. Namespace Cortesia {
  15.     saludar();  
  16.     echo $saludo;
  17. }


En fin.... no soy un experto... a penas las estoy usando... ojala te solucionen algo

Mas
__________________
Salu2!

Última edición por Italico76; 16/07/2013 a las 06:13