2009-07-29 12 views
7

Me pregunto si PHP tiene un tipo de variable en las clases que funciona como estática en otros idiomas. Y con eso quiero decir que todos los objetos de la misma clase usan la misma variable y cuando se actualiza en uno se actualiza en cada uno. Static está cerca porque se comparte en todos los objetos, pero necesito poder actualizarlo. ¿Tendré que usar globales para esto?¿Cuál es el equivalente PHP de una variable estática en otros idiomas?

+0

¿Desde cuándo no puede actualizar las propiedades estáticas? – jason

+0

Las variables estáticas se pueden modificar ... –

+2

Las variables de Const no se pueden modificar; las variables estáticas pueden ser. – Extrakun

Respuesta

3

Creo estática es lo que desea. Puede actualizar una variable estática, sólo hay que hacerlo en un "contexto estático" (es decir, utilizando el operador ::

class Class1 { 
    protected static $_count = 0; 

    public function incrementCount() { 
     return self::$_count++; 
    } 
} 

$instance1 = new Class1(); 
$instance2 = new Class1(); 
var_dump($instance1->incrementCount(), $instance2->incrementCount()); 

la salida:..

int 0

int 1

+0

Este fue el problema. Estaba usando $ this en lugar de ::. – fent

0

Puede simplemente crear variables en un archivo PHP, por ejemplo, llamadas Constantes.

--Constants.php-- $ DATABASE_NAME = "mysql"

e incluyen el archivo en su archivo. Puedes cambiar su valor Se acerca mucho a lo que quieres, pero no es bueno llamarlos constantes porque las constantes no deben cambiarse, eso es lo que me confundió :).

0

No veo por qué la variable estática no funciona para lo que describió (pero no tiene nada que ver con la palabra clave final)?

<?php 

class Bla 
{ 
    public static $var; 

    public function __construct() 
    { 
     Bla::$var = Bla::$var + 1; 
    } 
} 

$test = new Bla(); 
echo Bla::$var; // 1 
$test = new Bla(); 
echo Bla::$var; // 2 

?> 
1

You ¿pueden actualizar propiedades estáticas:

class A { 
    protected static $_foo = 0; 

    public function increment() 
    { 
     self::$_foo++; 
    } 

    public function getFoo() 
    { 
     return self::$_foo; 
    } 
} 


$instanceOne = new A(); 
$instanceTwo = new A(); 


$instanceOne->getFoo(); // returns 0 

$instanceTwo->increment(); 

$instanceOne->getFoo(); // returns 1 
0

creo statices la palabra clave que busca.

y no hay nada que impida un static property from beeing "updated", en PHP: se inicializa la primera vez que se configura, mantiene su valor durante la ejecución del script PHP, pero definitivamente puede establecerlo en un nuevo valor.

6

La respuesta correcta es que no existe un equivalente en PHP a final, pero static parece ser lo que quería en primer lugar de todos modos.

estática tiene la propiedad de que tendrá el mismo valor en todas las instancias de una clase, porque no está vinculada a una instancia en particular.

Usted tendrá que utilizar el operador :: para acceder a ella, porque al ser estática, no se puede utilizar ->.

Cuestiones relacionadas