PHP基礎(chǔ)之類(lèi)和對(duì)象18——對(duì)象比較
PHP 5 中的對(duì)象比較要比 PHP 4 中復(fù)雜,所期望的結(jié)果更符合一個(gè)面向?qū)ο笳Z(yǔ)言。
當(dāng)使用比較運(yùn)算符(==)比較兩個(gè)對(duì)象變量時(shí),比較的原則是:如果兩個(gè)對(duì)象的屬性和屬性值 都相等,而且兩個(gè)對(duì)象是同一個(gè)類(lèi)的實(shí)例,那么這兩個(gè)對(duì)象變量相等。
而如果使用全等運(yùn)算符(===),這兩個(gè)對(duì)象變量一定要指向某個(gè)類(lèi)的同一個(gè)實(shí)例(即同一個(gè)對(duì)象)。
通過(guò)下面的示例可以理解以上原則。
Example #1 PHP 5 的對(duì)象比較
<?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);?>
以上例程會(huì)輸出:
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 擴(kuò)展中可以自行定義對(duì)象比較的原則。
相關(guān)文章:
1. ASP中解決“對(duì)象關(guān)閉時(shí),不允許操作。”的詭異問(wèn)題……2. IDEA版最新MyBatis程序配置教程詳解3. 教你如何寫(xiě)出可維護(hù)的JS代碼4. Django:使用filter的pk進(jìn)行多值查詢(xún)操作5. 使用Python和百度語(yǔ)音識(shí)別生成視頻字幕的實(shí)現(xiàn)6. 淺談SpringMVC jsp前臺(tái)獲取參數(shù)的方式 EL表達(dá)式7. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)8. idea打開(kāi)多個(gè)窗口的操作方法9. Gitlab CI-CD自動(dòng)化部署SpringBoot項(xiàng)目的方法步驟10. docker /var/lib/docker/aufs/mnt 目錄清理方法
