¿Las variables estáticas en php persisten a través de las solicitudes?


Variable estática gotcha en php

Soy de Java background y he cambiado a php para un proyecto recientemente. He encontrado un comportamiento inesperado en php.

El valor establecido en alguna variable estática es no permanecer persistente a través de la solicitudes.

No estoy seguro de si este es el comportamiento esperado. Porque en Java, siempre puede persistir variables muy utilizadas o decir constantes como dbname, hostname, username, password a través de las solicitudes para que no tenga que leerlas siempre desde archivos de propiedades locales.

¿Es este comportamiento normal? Y si es normal, ¿hay alguna alternativa por la que pueda persistir los valores asignados a las variables a través de las solicitudes ?

¿Puede alguien sugerirme una mejor manera de hacer esto en php?

Author: Vaibhav Kamble, 2009-02-06

3 answers

No, mientras que una variable estática permanecerá para la solicitud actual, deberá agregarla a una sesión para mantener su valor en todas las solicitudes.

Ejemplo:

session_start();

class Car {
    public static $make;
    public function __construct($make) {
        self::$make = $make;
    }
}

$c = new Car('Bugatti');
echo '<p>' . Car::$make . '</p>';
unset($c);

if (!isset($_SESSION['make'])) {
    echo '<p>' . Car::$make . '</p>';
    $c = new Car('Ferrari');
    echo '<p>' . Car::$make . '</p>';
}

$_SESSION['make'] = Car::$make;

echo '<p>' . $_SESSION['make'] . '</p>';
 17
Author: Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-09 16:05:49

Las variables estáticas solo son aplicables a una sola solicitud. Si desea que los datos persistan entre las solicitudes de un usuario específico, utilice solo variables de sesión.

Un buen arranque tut para ellos se encuentra aquí: http://www.tizag.com/phpT/phpsessions.php

 2
Author: Matt Razza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-06 12:41:30

Si comienza a trabajar con conjuntos de datos complejos en sesiones, es posible que desee analizar el almacenamiento de datos en objetos que se serializan en la base de datos y se extraen al restaurar la sesión.

Las variables en PHP no están destinadas a ser persistentes. El flujo de su aplicación (la pila) se ejecuta de principio a fin en cada ejecución de página. No hay nada viviendo en el fondo que continúe su lógica o aplicación. Lo más cercano es una sesión pero no quieres almacenar información como db acceso etc. allí.

Las configuraciones de su base de datos deben estar en algún tipo de archivo de configuración o entorno al que se accede una vez para conectarse a la base de datos, una vez que se ha realizado una conexión, simplemente puede consultar cuando sea necesario y usar el controlador de conexión para identificar qué conexión usar.

 2
Author: Syntax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-06 13:05:50