- Learn
- Programmazione a oggetti con PHP, la guida
- Confrontare gli oggetti
Confrontare gli oggetti
L’operazione di confronto tra due oggetti, per quanto immediata possa sembrare, racchiude svariate competenze che vanno oltre al semplice concetto di confronto di variabili. Innanzitutto occorre sapere che in PHP esistono due operatori per confrontare due variabili tra di loro:
- l’operatore di uguaglianza (“==”): restituisce true se le due variabili contengono lo stesso valore, anche se sono di tipo diverso
- l’operatore di identità (“===”): restituisce true se le due variabili contengono lo stesso valore e sono dello stesso tipo
Ciò significa che, ad esempio:
$a = 10;
$b = "10";
// restituisce true
($a == $b)
// restituisce false
($a === $b)
Questa regola vale per il confronto tra tutti i tipi semplici di dato. Tuttavia, nel caso degli oggetti, nonostante gli operatori siano i medesimi, occorrono nuove regole per il confronto. Eccole:
- l’operatore di uguaglianza: restituisce true se i due oggetti hanno le stesse coppie proprietà/valore e sono istanze della stessa classe
- l’operatore di identità: restituisce true se e solo se i due oggetti si riferiscono alla stessa istanza della classe
Consci di queste nuove direttive, possiamo ora andare ad analizzare i casi pratici di confronti. Partiamo utilizzando l’operatore di uguaglianza:
function cmpobj($res) {
echo ($res) ? "yes" : "no";
}
class A {
public $a = 10;
public $b = 20;
}
class B {
public $a = 10;
public $b = 20;
}
$a = new A;
$b = new A;
$c = new A;
$d = new B;
$c->a = 20;
// stampa "yes" (stesse proprietà, stessi valori)
cmpobj($a == $b);
// stampa "no" (stesse proprietà, valori differenti)
cmpobj($a == $c);
// stampa "no" (stesse proprietà, valori differenti)
cmpobj($b == $c);
// stampa "no" (diverso tipo)
cmpobj($a == $d);
Vediamo ora l’operatore di identità, che anche nel caso degli oggetti, è assai più restrittivo del precedente:
$a = new A;
$b = new A;
$c = new A;
$d = new B;
$c->a = 20;
// stampa "no" (stesse proprietà, stessi valori, istanze differenti)
cmpobj($a === $b);
// stampa "no" (istanze differenti)
cmpobj($a === $c);
// stampa "no" (istanze differenti)
cmpobj($b === $c);
// stampa "no"
cmpobj($a === $d);
$e = $a;
// stampa "yes" (stesse istanze)
cmpobj($a === $e)
Come possiamo notare, l’unico modo per ottenere un risultato positivo nel confronto tra oggetti utilizzando l’operatore di identità è che essi costituiscano la stessa istanza.
Conclusione
Per quanto rara possa essere l’operazione di confronto degli oggetti, essa presenta delle caratteristiche insolite rispetto alle semplici variabili, come abbiamo poututo vedere in questa lezione. Essere consci delle regole di confronto valide per le istanze è molto importante in uno scenario reale. Nella prossima lezione, l’ultima dello “step” degli extra, analizzeremo un nuovo operatore che ci permetterà di ottenere indicazioni sul tipo di un determinato oggetto.
Se vuoi aggiornamenti su Confrontare gli oggetti inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Personalizzare Android … è difficile?
Una chiacchierata con Paolo Di Paola che ha lavorato alla customizzazione di Android e ci racconta cosa significa e cosa […]