Il tipo degli oggetti



Per scoprire se un oggetto è un'istanza di una determinata classe, l'operatore instanceof è quello che fa al caso nostro. Basta usarlo in combinazione con la variabile desiderata e il nome della classe di cui si vuole verificare l'appartenenza:

$instance instanceof MyClass 

Ecco un semplice esempio:

class MyClass {
        public $a = 10;
        public $b = 20;
        public $c = 30;
}

class MyOtherClass {
        public $a = 10;
        public $b = 20;
        public $c = 30;
}

$myClass_1 = new MyClass();
$myOtherClass_1 = new MyOtherClass();

// stampa "$myClass_1 è un'istanza della classe MyClass"
echo ($myClass_1 instanceof MyClass) ? "\$myClass_1 è un'istanza della classe MyClass" : "\$myClass_1 non è un'istanza della classe MyClass";

// stampa "$myOtherClass_1 non è un'istanza della classe MyClass"
echo ($myOtherClass_1 instanceof MyClass) ? "\$myOtherClass_1 è un'istanza della classe MyClass" : "\$myOtherClass_1 non è un'istanza della classe MyClass";

La variabile $myClass_1 è un'istanza della classe MyClass, mentre la variabile $myOtherClass_1 non lo è.

Operatore instanceof e gerarchie

Anche l'operatore instanceof agisce sulle gerarchie di classi: ciò significa che se una classe eredita da un'altra classe, essa avrà comunque il tipo della classe da cui eredita, in aggiunta al proprio. Questo concetto è valido anche nel caso delle interfacce: è possibile usare l'operatore instanceof in collaborazione con il namespace di un'interfaccia e, se la classe la implementa, il risultato sarà true.

Ecco degli esempi:

interface ICommon {
        
        public function doThis();
        
}

class MyClass {
        public $a = 10;
        public $b = 20;
        public $c = 30;
}

class MyOtherClass extends MyClass {
        public $d = 40;
        public $e = 50;
        public $f = 60;
}

class MyThirdClass implements ICommon {

        public function doThis() {
                echo "Done!";
        }
}

$myClass_1 = new MyClass();
$myOtherClass_1 = new MyOtherClass();
$myThirdClass_1 = new MyThirdClass();

// stampa "no"
echo ($myClass_1 instanceof MyOtherClass) ? "yes" : "no";

// stampa "yes"
echo ($myOtherClass_1 instanceof MyClass) ? "yes" : "no";

// stampa "yes"
echo ($myOtherClass_1 instanceof MyOtherClass) ? "yes" : "no";

// stampa "yes"
echo ($myThirdClass_1 instanceof ICommon) ? "yes" : "no";

Come possiamo notare, l'oggetto $myClass_1 è un'istanza della classe MyClass ma non della classe MyOtherClass, mentre l'oggetto $myOtherClass_1 è un'istanza di entrambe le classi. L'oggetto $myThirdClass_1 implementa l'interfaccia ICommon, dunque l'operatore instanceof ha esito positivo.

Conclusione

L'operatore instanceof non è l'unica modalità offerta da PHP per analizzare la classe di appartenenza di un'istanza (le funzioni is_a, get_class, is_subclass_of e get_parent_class sono tutte adatte a questo scopo), ma costituisce l'alternativa più valida tra tutte, dunque per qualsiasi compito di checking del tipo di un oggetto il suo utilizzo è fortemente consigliato, direttamente dai creatori del linguaggio, rispetto alle altre funzioni.

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