2012-02-29 16 views
7

Esta es una versión simplificada de lo que quiero lograr:¿Cómo cambio un valor de variables estáticas en PHP?

En mi secuencia de comandos deseo una variable que cambie verdadero y falso cada vez que se ejecuta el script.

<?php 
    static $bool = true; 

    // Print differente messages depending on $bool 
    if($bool == true) 
     echo "It's true!"; 
    else 
     echo "It's false!"; 

    // Change $bools value 
    if($bool == true) 
     $bool = false 
    else 
     $bool = true; 
?> 

Pero obviamente lo que estoy haciendo está mal. La variable $bool es constantemente true y no he captado por completo el concepto de variables estáticas, supongo. ¿Qué estoy haciendo mal?

Respuesta

14

PHP no puede mantener los valores variables entre las solicitudes. Esto significa que cada vez que se invoca su secuencia de comandos, la variable $bool se establecerá en verdadero. Si desea mantener el valor entre las solicitudes, debe usar sessions o, si desea que la variable se comparta entre sesiones, algún mecanismo de caché como APC o Memcache.

Además, static se usa en PHP para declarar una variable compartida en el nivel de clase. Por lo tanto, se utiliza en las clases, y se accede como self::$variableName; o Foo::$variableName

Puede leer más acerca de static properties here. De los documentos:

Declarar propiedades de clase o métodos como estáticos los hace accesibles sin necesidad de crear una instancia de la clase. No se puede acceder a una propiedad declarada como estática con un objeto de clase instanciado (aunque puede hacerlo un método estático).

Además, tenga en cuenta que la palabra static se ha sobrecargado a partir de PHP 5.3, y también puede ser utilizado para denotar Late Static Binding, mediante el uso de static::

+0

Hmm ... Entonces, si moviera la variable estática a una clase, ¿podría cambiar el valor de ida y vuelta entre las ejecuciones de mi script principal? – Weblurk

+0

No, mira mi respuesta. – BenM

+4

No. Static se puede usar para declarar variables de clase o dentro de una función para declarar una variable que persiste sobre las llamadas a funciones, pero no sobre las ejecuciones del script. –

2

Un valor estático no persistirá en las ejecuciones. Cada vez que se ejecuta el script $ bool se inicializa. Creo que debe mantener este valor en un archivo para que sea sencillo.

+0

Pensé que ese era el punto con las variables estáticas, que SI persistieron en las ejecuciones. Prefiero no guardarlo en un archivo separado o ¿es esa la única solución? – Weblurk

+0

Puedes usar Memcache, APC, Redis, un archivo ... lo que quieras. Pero debe almacenar el valor actual de la variable en algún lugar. –

2

creo que es necesario para comprender mejor la punta de una variable estática El almacenamiento de la variable se asigna (y desasigna) a la pila de llamadas, por lo que desde un punto de vista de ingeniería de software, su valor no se puede cambiar en tiempo de ejecución.

Hay mejores soluciones como se sugirió anteriormente para esto.

+1

En realidad, las variables estáticas en PHP no son estáticas en absoluto ... sus valores pueden cambiarse durante la ejecución. Es solo una variable compartida de una clase. – PatrikAkerstrand

+0

Esto habilita el código como 'class Look {protected static $ _cache = array(); función pública expensiveLookup ($ x) {if (! isset (self :: $ _ cache [$ x]) {self :: $ _ cache [$ x] = $ this -> _ lookup ($ x);} return self :: $ _cache [$ x];}} ' – PatrikAkerstrand