Proprietà statiche



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 Files\wamp\www\HTML.it\PHP\guida_oop\lez_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."

Ultimi articoli PHP

Sessioni PHP: cosa sono, come si usano

Dalla configurazione di PHP, alla gestione delle sessioni in un...

Continuous Integration: automatizziamo i client con Phing

Continuous Integration: automatizziamo i client con Phing. Esempi...

Archiviazione delle applicazioni PHP con Phar

Come incorporare intere applicazioni PHP all'interno di un singolo...

I traits in PHP 5.4

Cosa sono, a cosa servono e come si unsano i traits, la novità per...

PHP 5.4: il web server integrato

Impara ad usare il web server integrato nella versione 5.4 di PHP:...

Altri articoli

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Guida PHP con Windows e IIS

Installare ambienti per lo sviluppo e la produzione di applicazioni...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti