2009-07-29 2 views
7

Mi chiedo se PHP abbia un tipo di variabile in classi che funzioni come statico in altre lingue. E con ciò intendo che tutti gli oggetti della stessa classe usano la stessa variabile e quando viene aggiornata su uno viene aggiornata su ognuno di essi. Statico è vicino perché è condiviso in tutti gli oggetti ma devo essere in grado di aggiornarlo. Dovrò usare globals per questo?Qual è l'equivalente PHP di una variabile statica in altre lingue?

+0

Da quando non è possibile aggiornare le proprietà statiche? – jason

+0

Le variabili statiche possono essere modificate ... –

+2

Le variabili Const non possono essere modificate; le variabili statiche possono essere. – Extrakun

risposta

3

Credo statico è quello che volete. È possibile aggiornare una variabile statica, devi solo farlo in un "contesto statico" (vale a dire utilizzando l'operatore ::

class Class1 { 
    protected static $_count = 0; 

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

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

uscita volontà:..

int 0

int 1

+0

Questo era il problema. Stavo usando $ invece di ::. – fent

0

È possibile semplicemente creare variabili in un file PHP dire Constants.

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

e includere il file nel file. Puoi cambiare il suo valore. Si avvicina a quello che vuoi, ma non è buono chiamarli costanti perché le costanti non sono destinate a essere cambiate, questo è ciò che mi ha confuso :).

0

Non vedo perché rendere la variabile statica non funzioni per quello che hai descritto (ma non ha nulla a che fare con la parola chiave 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 can aggiornamento proprietà statiche:

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

penso staticè la parola chiave che state cercando.

E non c'è niente che impedisce a un static proprietà di essere "aggiornate", in PHP: è inizializzata la prima volta che viene impostata, la mantiene costante durante l'esecuzione dello script PHP, ma è possibile impostarla definitivamente su un nuovo valore.

6

La risposta corretta è che non c'è equivalente in PHP alla finale, ma lo statico sembra comunque quello che volevi in ​​primo luogo.

statico ha la proprietà che avrà lo stesso valore su tutte le istanze di una classe, perché non è legato a una particolare istanza.

Sarà necessario utilizzare l'operatore :: per accedervi, perché essere statico, non è possibile utilizzare ->.