¿Las variables estáticas en php persisten en las solicitudes?

Variable estática gotcha en php

Soy de origen Java y recientemente cambié a php para un proyecto. He encontrado un comportamiento inesperado en php.

El valor establecido en una variable estática no se mantiene constante en todas las solicitudes.

No estoy seguro de si este es el comportamiento esperado. Porque en java, siempre puede persistir variables de uso muy común o decir constantes como dbname, nombre de host, nombre de usuario, contraseña entre las solicitudes para que no tenga que leerlas siempre desde los archivos de propiedades locales.

¿Es este comportamiento normal? Y si es normal, ¿hay alguna alternativa por la cual pueda persistir los valores asignados a las variables en todas las solicitudes?

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

No, mientras que una variable estática se mantendrá para la solicitud actual, deberá agregarla a una sesión para conservar 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 '

' . Car::$make . '

'; unset($c); if (!isset($_SESSION['make'])) { echo '

' . Car::$make . '

'; $c = new Car('Ferrari'); echo '

' . Car::$make . '

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

' . $_SESSION['make'] . '

';

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

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

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

Las variables en PHP no son persistentes. El flujo de su aplicación (la stack) se ejecuta de principio a fin en cada ejecución de página. No hay nada vivo en el fondo que continúe con tu lógica o aplicación. Lo más parecido es una sesión, pero no desea almacenar información como acceso a db, 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 acceda una vez para conectarse a la base de datos. Una vez que se ha establecido una conexión, puede consultar siempre que sea necesario y usar el identificador de conexión para identificar qué conexión usar.