Incluso si desarrolla un nuevo programa PHP a gran escala, inevitablemente utilizará datos globales, porque algunos datos se utilizarán en diferentes partes de su código. Algunos datos globales comunes incluyen: clases de configuración de programas, clases de conexión de bases de datos, información del usuario, etc. Hay muchas formas de convertir estos datos en datos globales, la más comúnmente utilizada es utilizar la declaración de palabra clave "global", que explicaremos en detalle más adelante en este artículo.
La única desventaja de utilizar la palabra clave "global" para declarar datos globales es que en realidad es una forma muy deficiente de programación y, a menudo, genera problemas mayores más adelante en el programa, porque los datos globales separan el código. Todos los segmentos de código están vinculados. juntos, por lo que si cambia una parte del código, puede causar que otras partes salgan mal. Entonces, si hay muchas variables globales en su código, será difícil mantener todo su programa.
Este artículo mostrará cómo prevenir este problema de variable global mediante diferentes técnicas o patrones de diseño. Por supuesto, primero veamos cómo utilizar la palabra clave "global" para datos globales y cómo funciona. El uso de variables globales y la palabra clave "global"
PHP define algunas variables "Superglobales" de forma predeterminada. Estas variables se globalizan automáticamente y se pueden llamar en cualquier parte del programa, como $_GET y $_REQUEST, etc. Por lo general, provienen de datos u otros datos externos, y el uso de estas variables generalmente no causa problemas porque básicamente no se pueden escribir.
Pero puedes usar tus propias variables globales. Usando la palabra clave "global" puede importar datos globales al alcance local de una función. Si no comprende el "alcance de uso variable", consulte las instrucciones relevantes en el manual de PHP.
El siguiente es un ejemplo de demostración usando la palabra clave "global":
El siguiente es el contenido citado:
<?php
$my_var = 'Hola mundo';
prueba_global();
función prueba_global() {
// Ahora en ámbito local
// la variable $my_var no existe
// Produce error: "Variable no definida: my_var"
echo $mi_var;
// Ahora vamos a importar la variable
global $mi_var;
// Obras:
echo $mi_var;
}
?>
Como puede ver en el ejemplo anterior, la palabra clave "global" se utiliza para importar variables globales. Parece que funciona bien y es simple, entonces ¿por qué nos preocupamos por usar la palabra clave "global" para definir datos globales?
Aquí hay tres buenas razones:
1. La reutilización de código es casi imposible.
Si una función depende de variables globales, es casi imposible usar esta función en diferentes entornos. Otro problema es que no puedes extraer esta función y usarla en otro código.
2. Depurar y resolver problemas es muy difícil.
El seguimiento de una variable global es mucho más difícil que el seguimiento de una variable no global. Una variable global puede redefinirse en algún archivo de inclusión oscuro, e incluso si tiene un muy buen editor de programas (o IDE) para ayudarlo, puede llevarle varias horas descubrir el problema.
3. Será muy difícil entender estos códigos.
Le resultará difícil determinar de dónde proviene una variable global y para qué se utiliza. Durante el proceso de desarrollo, es posible que conozca todas las variables globales, pero después de aproximadamente un año, es posible que olvide al menos algunas de ellas. En este momento, se arrepentirá de haber utilizado tantas variables globales.
Entonces, si no usamos variables globales, ¿qué usamos? Veamos algunas soluciones a continuación.
Uso de parámetros de función
Una forma de dejar de usar variables globales es simplemente pasar la variable como parámetro a la función, como se muestra a continuación:
El siguiente es el contenido de la cita:
<?php
$var = 'Hola mundo';
prueba ($var);
prueba de función ($var) {
eco $var;
}
?>
Si solo necesita pasar una variable global, entonces esta es una solución muy buena o incluso excelente, pero ¿qué pasa si desea pasar muchos valores?
Por ejemplo, supongamos que queremos utilizar una clase de base de datos, una clase de configuración del programa y una clase de usuario. En nuestro código, estas tres clases se utilizan en todos los componentes, por lo que deben pasarse a cada componente. Si usamos el método del parámetro de función, tenemos que hacer esto:
El siguiente es el contenido citado:
<?php
$db = nueva conexión DB;
$configuración = nueva Configuración_XML;
$usuario = nuevo usuario;
prueba($db, $configuración, $usuario);
prueba de función(&$db, &$configuración, &$usuario) {
// Haz algo
}
?>
Obviamente, esto no vale la pena, y una vez que tenemos nuevos objetos para agregar, tenemos que agregar un parámetro de función más a cada función. Entonces necesitamos usar otra forma de resolverlo.