Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 33 di 50
  • livello avanzato
Indice lezioni

Proprietà statiche

Le proprietà che sono componenti statiche della stessa classe
Le proprietà che sono componenti statiche della stessa classe
Link copiato negli appunti

Nella lezione dedicata alle costanti, abbiamo dato uno sguardo alla differenza che si interpone tra dati dinamici e dati statici di una classe. Come abbiamo già visto, è possibile classificare le proprietà ed i metodi come dati dinamici e le costanti come dati statici.

Tuttavia, oltre a queste, esistono altre componenti che è possibile dichiarare in una classe: le proprietà statiche ed i metodi statici.

Le proprietà statiche

A differenza delle normali proprietà, che appartengono alle determinate istanze della classe e vengono richiamate con l'operatore di deferenziamento ("->") e che rappresentano dunque dei dati istanza, le proprietà statiche non appartengono a nessuna istanza in particolare, ma sono di fatto componenti statiche di proprietà della classe stessa.

Ciò significa che non è possibile richiamare le proprietà statiche attraverso le istanze, ma occorre, come nel caso delle costanti, usare l'operatore di risoluzione dell'ambito ("::") oppure la keyword self.

Le proprietà statiche si dichiarano attraverso la parola chiave static, preceduta o seguita opzionalmente dall'indicatore di visibilità (che analizzeremo nelle successive lezioni) e dal namespace desiderato. Se non si specifica nessun indicatore di visibilità, verrà utilizzato il valore public. Ecco un esempio di dichiarazione ed utilizzo delle proprietà statiche:

class MyClass {
        // proprietà statiche
        public static $apples = 10;
        public static $pineapples = 20;
}
// stampa 10
echo MyClass::$apples;
// stampa 20
echo MyClass::$pineapples;

Come possiamo notare, a differenza delle costanti che non richiedono il simbolo del dollaro "$" iniziale, con le proprietà statiche occorre dichiararlo. Le proprietà statiche dunque, essendo dati statici, non possono essere richiamate attraverso le istanze della classe, altrimenti PHP cercherà una proprietà normale avente lo stesso nome e concluderà con l'errore E_NOTICE Undefined property...:

$myClass_1 = new MyClass();
// Notice: Undefined property: MyClass::$apples in C:Program FileswampwwwHTML.itPHPguida_ooplez_8.php on line 59
echo $myClass_1->apples;

Ma cosa cambia dunque, tra le proprietà statiche e le costanti, a parte la differente sintassi?

La risposta è molto semplice: mentre le costanti sono dati immutabili, cioè che devono rimanere invariati durante il corso di tutta l'applicazione, le proprietà statiche possono cambiare il loro valore come le normali proprietà. Ecco un esempio in cui, tramite il metodo costruttore, si contano quante istanze vengono create nel corso del nostro script e tramite il metodo distruttore viene indicato quale istanza, identificata da un idKey univoco, è stata eliminata:

class MyClass {
        // proprietà statiche
        public static $instances = 0;
        public $idKey = false;
        // costruttore
        public function __construct() {
                $this->idKey = ++self::$instances;
                echo "This is the #" . $this->idKey . " instance of the class MyClass. Instances created: " . $this->idKey;
        }
        // distruttore
        public function __destruct() {
                echo "Instance #" . $this->idKey . " deleted.";
        }
}
// stampa "This is the #1 instance of the class MyClass. Instances created: 1"
$myClass_1 = new MyClass();
// stampa "This is the #2 instance of the class MyClass. Instances created: 2"
$myClass_2 = new MyClass();
// stampa "This is the #3 instance of the class MyClass. Instances created: 3"
$myClass_3 = new MyClass();
// al termine dello script: "Instance #1 deleted.", "Instance #2 deleted.", "Instance #3 deleted."

Ti consigliamo anche