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<?php
Namespace Cortesia; // Incluyes esta linea
function saludar(){
global $saludo;
$saludo = 'Hola Mundo';
}
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<?php
Namespace Cortesia {
Include "hello_lib.php";
}
// Espacio de trabajo "Global" ... es como decir que no pertenece a nigun Namespace
Namespace {
// Otra funcion que se llama saludar y colisionaria
function saludar($nombre){
return "Hola $nombre";
}
}
Namespace Cortesia {
saludar();
echo $saludo;
}
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<?php
Namespace Cortesia {
Include "hello_lib.php";
}
// ACA estaba el NAMESPACE GLOBAL (pero lo quite)
// Otra funcion que se llama saludar y colisionaria
function saludar($nombre){
return "Hola $nombre";
}
Namespace Cortesia {
saludar();
echo $saludo;
}
En fin.... no soy un experto... a penas las estoy usando... ojala te solucionen algo
Mas