Le costanti



Oltre alle proprietà ed ai metodi, in una classe possiamo dichiarare le costanti, proprio come accade nel codice di primo livello. Le costanti differiscono dalle proprietà per due aspetti fondamentali:

  • aspetto sintattico: le costanti dichiarate in una classe (come le rispettive controparti esterne) non sono precedute dal simbolo del dollaro "$"
  • aspetto funzionale: le costanti avranno uno e un solo valore per tutta la durata dello script. Non è possibile cambiare il valore di una costante senza provocare errori

Le costanti di una classe dunque, sono dati statici, immutabili.

Dichiarare le costanti

Per dichiarare una costante all'interno di una classe, occorre utilizzare la keyword const seguita dal nome e dal valore della costante stessa:

class MyClass {

        // costanti
        const A = 'A';
        const B = 'B';
        const C = 'C';

}

Valori delle costanti

Proprio come nel caso delle proprietà, è possibile assegnare un valore ad una costante direttamente nella fase di dichiarazione della stessa. Il valore tuttavia, deve essere un valore semplice e non, ad esempio, un risultato di un'espressione, un'assegnazione di variabile o il valore restituito da una funzione. Le costanti inoltre, non possono contenere valori complessi:

class MyClass {

        // costanti
        const A = 2 * 2;                // errore
        const B = array(10, 20);        // errore
        const C = $a;                   // errore
        const D = get_value();          // errore

}

Accedere alle costanti

A differenza delle proprietà e dei metodi, le costanti non hanno una posizione definita per ogni istanza della classe. Questo perché le costanti sono dati classe e non dati istanza: esse rappresentano un dato statico (tenete a mente questo ultimo termine perché tra poche lezioni impareremo quanta importanza riscuote all'interno della OOP) .

La logica conseguenza a quanto detto, è che non è possibile né utilizzare la keyword $this per riferirsi alle costanti dall'interno della classe, né l'operatore di deferenziamento ("->") per riferirsi dall'esterno. Occorrono dunque altre modalità per accedere alle costanti. Eccole:

  • la parola chiave self, in combinazione con l'operatore di risoluzione dell'ambito ("::"), per accedere al valore delle costanti dall'interno della classe
  • il nome della classe stessa per accedere al valore delle costanti dall'interno e dall'esterno della classe

In base a quanto detto, vediamo dunque come accedere ai valori delle costanti, sia dall'interno che dall'esterno della classe:

class MyClass {

        // costanti
        const A = 10;
        const B = 10;
        
        public function getConsts() {
                echo "The value of the constant A is " . self::A;
                echo "The value of the constant B is " . MyClass::B;
        }

}

$myClass = new MyClass();

// stampa "The value of the constant A is 10 The value of the constant B is 20"
$myClass->getConsts();

// stampa 10
echo MyClass::A;

Ricordo inoltre, che non è assolutamente possibile accedere al valore di una costante tramite le istanze della classe, altrimenti si finirebbe per causare un errore:

echo $myClass::A;       // errore

Questo accade perché vi è un'enorme differenza tra i dati dinamici di una classe (proprietà e metodi) ed i dati statici (costanti, proprietà statiche, metodi statici), come vedremo nel dettaglio nella lezione dedicata appunto ai dati statici.

Conclusione

Come abbiamo visto, grazie alla presenza delle costanti, possiamo inserire dati immutabili nelle nostre classi. Molti sviluppatori creano vere e proprie classi wrapper statiche che contengono solo costanti, in modo da usufruirne successivamente attraverso una postazione centralizzata (inoltre le costanti dichiarate nelle classi sono un'alternativa più veloce rispetto a quelle di primo livello dichiarate con la funzione define):

class Tools {

        url: "http://www.google.com/",
        copyright: "Google Inc.",
        root: "/",
        reader: "/reader"

}

// stampa "http://www.google.com/"
echo Tools::url;

// stampa "Google Inc."
echo Tools::copyright;

Nella prossima lezione osserveremo il metodo più importante che è possibile implementare in una classe: il costruttore.

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