usar - variables globales en php no funcionan como se esperaba
variables globales php ejemplos (7)
Debe colocar "$ pantalla global" en cada función que lo haga referencia, no solo en la parte superior de cada archivo.
Estoy teniendo problemas con las variables globales en php. Tengo un $screen
var establecido en un archivo, que requiere otro archivo que llame a un initSession()
definido en otro archivo. El initSession()
declara global $screen
y luego procesa $ pantalla más abajo utilizando el valor establecido en el primer script.
¿Cómo es esto posible?
Para hacer las cosas más confusas, si intentas configurar $ pantalla nuevamente y luego llamar a initSession()
, usa el valor que se usó una vez más. El siguiente código describirá el proceso. ¿Podría alguien intentar explicar esto?
$screen = "list1.inc"; // From model.php
require "controller.php"; // From model.php
initSession(); // From controller.php
global $screen; // From Include.Session.inc
echo $screen; // prints "list1.inc" // From anywhere
$screen = "delete1.inc"; // From model2.php
require "controller2.php"
initSession();
global $screen;
echo $screen; // prints "list1.inc"
Actualizar:
Si declaro $screen
global de nuevo justo antes de requerir el segundo modelo, $ screen se actualiza correctamente para el método initSession()
. Extraño.
El alcance global abarca los archivos incluidos y los necesarios, no es necesario que use la palabra clave global a menos que use la variable desde dentro de una función. Podría intentar usar la matriz $ GLOBALS en su lugar.
Si tiene muchas variables a las que desea acceder durante una tarea que utiliza muchas funciones, considere la posibilidad de crear un objeto ''contextual'' para contener las cosas:
//We''re doing "foo", and we need importantString and relevantObject to do it
$fooContext = new StdClass(); //StdClass is an empty class
$fooContext->importantString = "a very important string";
$fooContext->relevantObject = new RelevantObject();
doFoo($fooContext);
Ahora solo pasa este objeto como un parámetro a todas las funciones. No necesitará variables globales y sus firmas de funciones se mantendrán limpias. También es fácil reemplazar el StdClass vacío con una clase que realmente tenga métodos relevantes.
global $foo
no significa "hacer que esta variable sea global, para que todos puedan usarla". global $foo
significa " dentro del alcance de esta función , use la variable global $foo
".
Supongo por su ejemplo que cada vez se refiere a $ pantalla desde dentro de una función. Si es así, deberá usar global $screen
en cada función.
Debe declarar una variable como global antes de definir valores para ella.
Global
NO hace que la variable sea global. Sé que es complicado :-)
Global
dice que una variable local se usará como si fuera una variable con un alcance mayor .
P.EJ :
<?php
$var = "test"; // this is accessible in all the rest of the code, even an included one
function foo2()
{
global $var;
echo $var; // this print "test"
$var = ''test2'';
}
global $var; // this is totally useless, unless this file is included inside a class or function
function foo()
{
echo $var; // this print nothing, you are using a local var
$var = ''test3'';
}
foo();
foo2();
echo $var; // this will print ''test2''
?>
Tenga en cuenta que los vars globales rara vez son una buena idea. Puede codificar 99.99999% del tiempo sin ellos y su código es mucho más fácil de mantener si no tiene ámbitos difusos. Evita global
si puedes.
Es inútil hasta que esté en la función o una clase. Global significa que puede usar una variable en cualquier parte del programa. Entonces, si el global no está contenido en la función o en una clase, no se puede usar Global.