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?
risposta
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
Questo era il problema. Stavo usando $ invece di ::. – fent
È 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 :).
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
?>
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
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.
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 ->.
Da quando non è possibile aggiornare le proprietà statiche? – jason
Le variabili statiche possono essere modificate ... –
Le variabili Const non possono essere modificate; le variabili statiche possono essere. – Extrakun