| Avvertimento |
Questo modulo è
SPERIMENTALE. Ovvero, il comportamento di queste
funzioni, i nomi di queste funzioni, in definitiva tutto ciò
che è documentato qui può cambiare nei futuri rilasci
del PHP senza preavviso. Siete avvisati, l'uso di questo modulo
è a vostro rischio. |
In PHP 5, il confronto tra oggetti è più complicato che in PHP 4, ed è in armonia
con quello che ci si può aspettare da un linguaggio orientato agli oggetti
(non che PHP 5 lo sia veramente).
Quando si usa l'operatore di confronto (==),
le variabili oggetto sono confrontate in modo semplice, cioè: due istanze
di oggetto sono uguali se hanno gli stessi attributi e valori, e sono
istanze della stessa classe, definita nello stesso spazio dei nomi.
Diversamente, quando usiamo l'operatore di identità (===),
le variabili oggetto sono identiche se e solo se si riferiscono alla stessa
istanza della stessa classe (in un particolare spazio dei nomi).
Un esempio chiarirà questa regola.
Esempio 13-3. Esempio di confronto di oggetti in PHP 5
<?php function bool2str($bool) { if ($bool === false) { return 'FALSE'; } else { return 'TRUE'; } }
function compareObjects(&$o1, &$o2) { echo 'o1 == o2 : '.bool2str($o1 == $o2)."\n"; echo 'o1 != o2 : '.bool2str($o1 != $o2)."\n"; echo 'o1 === o2 : '.bool2str($o1 === $o2)."\n"; echo 'o1 !== o2 : '.bool2str($o1 !== $o2)."\n"; }
class Flag { var $flag;
function Flag($flag=true) { $this->flag = $flag; } }
namespace Other {
class Flag { var $flag;
function Flag($flag=true) { $this->flag = $flag; } }
}
$o = new Flag(); $p = new Flag(); $q = $o; $r = new Other::Flag();
echo "Due istanze della stessa classe\n"; compareObjects($o, $p);
echo "\nDue riferimenti alla stessa istanza\n"; compareObjects($o, $q);
echo "\nIstanze di classi di diversi spazi dei nomi e simili nomi di classe\n"; compareObjects($o, $r); ?>
|
|
L'esempio stampa:
Due istanze della stessa classe
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Due riferimenti alla stessa istanza
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
Istanze di classi di diversi spazi dei nomi e simili nomi di classe
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE |