PHP基礎之類和對象18——對象比較
PHP 5 中的對象比較要比 PHP 4 中復雜,所期望的結果更符合一個面向對象語言。
當使用比較運算符(==)比較兩個對象變量時,比較的原則是:如果兩個對象的屬性和屬性值 都相等,而且兩個對象是同一個類的實例,那么這兩個對象變量相等。
而如果使用全等運算符(===),這兩個對象變量一定要指向某個類的同一個實例(即同一個對象)。
通過下面的示例可以理解以上原則。
Example #1 PHP 5 的對象比較
<?phpfunction 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{ public $flag; function Flag($flag = true) {$this->flag = $flag; }}class OtherFlag{ public $flag; function OtherFlag($flag = true) {$this->flag = $flag; }}$o = new Flag();$p = new Flag();$q = $o;$r = new OtherFlag();echo 'Two instances of the same classn';compareObjects($o, $p);echo 'nTwo references to the same instancen';compareObjects($o, $q);echo 'nInstances of two different classesn';compareObjects($o, $r);?>
以上例程會輸出:
Two instances of the same classo1 == o2 : TRUEo1 != o2 : FALSEo1 === o2 : FALSEo1 !== o2 : TRUETwo references to the same instanceo1 == o2 : TRUEo1 != o2 : FALSEo1 === o2 : TRUEo1 !== o2 : FALSEInstances of two different classeso1 == o2 : FALSEo1 != o2 : TRUEo1 === o2 : FALSEo1 !== o2 : TRUE
Note:
PHP 擴展中可以自行定義對象比較的原則。
相關文章: