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 è.
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.
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.
Sessioni PHP: cosa sono, come si usanoDalla configurazione di PHP, alla gestione delle sessioni in un... |
Continuous Integration: automatizziamo i client con PhingContinuous Integration: automatizziamo i client con Phing. Esempi... |
Archiviazione delle applicazioni PHP con PharCome incorporare intere applicazioni PHP all'interno di un singolo... |
I traits in PHP 5.4Cosa sono, a cosa servono e come si unsano i traits, la novità per... |
PHP 5.4: il web server integratoImpara ad usare il web server integrato nella versione 5.4 di PHP:... |
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Guida PHP con Windows e IISInstallare ambienti per lo sviluppo e la produzione di applicazioni... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |