亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中對象的區別

發布時間:2021-07-13 14:34:22 來源:億速云 閱讀:130 作者:chen 欄目:大數據

這篇文章主要介紹“PHP中對象的區別”,在日常操作中,相信很多人在PHP中對象的區別問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP中對象的區別”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

 

PHP中的對象比較

在之前的文章中,我們講過PHP中比較數組的時候發生了什么?。這次,我們來講講在對象比較的時候PHP是怎樣進行比較的。

首先,我們先根據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";
}

class A {
   private $t = true;
   public function setT($t){
       $this->t = $t;
   }
}

class B {
   protected $t = true;
   public function setT1($t){
       $this->t = $t;
   }
}

class C {
   private $t = true;
   public function setT($t){
       $this->t = $t;
   }
}

$a1 = new A();
$a2 = new A();

compareObjects($a1, $a2); // 相同的類
// o1 == o2 : TRUE
// o1 === o2 : FALSE

$a11 = $a1;

compareObjects($a1, $a11); // 相同的實例
// o1 == o2 : TRUE
// o1 === o2 : TRUE

$a11->setT(false);

compareObjects($a1, $a11); // 相同實例屬性值不同
// o1 == o2 : TRUE
// o1 === o2 : TRUE

$b = new B();

compareObjects($a1, $b); // 不同的類
// o1 == o2 : FALSE
// o1 === o2 : FALSE

$c = new C();

compareObjects($a1, $b); // 相同屬性不同的類
// o1 == o2 : FALSE
// o1 === o2 : FALSE
 

從例子中,我們可以看出基本都是符合上述三個條件的,不過需要注意的是,在===的情況下,如果是同一個實例對象,屬性值不同也會返回TRUE。我們再通過一個更復雜的例子來觀察:

$c = new stdClass();
$d = new stdClass();

$c->t1 = 'c';
$c->t2 = 10;
$c->t3 = 50;

$d->t1 = 'c';
$d->t2 = 11;
$d->t3 = 40;

echo 'c > d:', $c > $d ? 'TRUE' : 'FALSE', PHP_EOL; // FALSE
echo 'c < d:', $c < $d ? 'TRUE' : 'FALSE', PHP_EOL; // TRUE

$d->t2 = 10; // $t2屬性改成相等的
echo 'c > d:', $c > $d ? 'TRUE' : 'FALSE', PHP_EOL; // TRUE
echo 'c < d:', $c < $d ? 'TRUE' : 'FALSE', PHP_EOL; // FALSE

$d->t3 = 50; // $c、$d屬性都相等了
echo 'c >= d:', $c >= $d ? 'TRUE' : 'FALSE', PHP_EOL; // TRUE
echo 'c <= d:', $c <= $d ? 'TRUE' : 'FALSE', PHP_EOL; // TRUE
echo 'c == d:', $c == $d ? 'TRUE' : 'FALSE', PHP_EOL; // TRUE
echo 'c === d:', $c === $d ? 'TRUE' : 'FALSE', PHP_EOL; // FALSE

$c1 = clone $c; // 復制同一個對象
echo 'c == c1:', $c == $c1 ? 'TRUE' : 'FALSE', PHP_EOL; // TRUE
echo 'c === c1:', $c === $c1 ? 'TRUE' : 'FALSE', PHP_EOL; // FALSE

$c1->t4 = 'f'; // 增加了一個屬性
echo 'c > c1:', $c > $c1 ? 'TRUE' : 'FALSE', PHP_EOL; // TRUE
echo 'c < c1:', $c < $c1 ? 'TRUE' : 'FALSE', PHP_EOL; // FALSE
echo 'c == c1:', $c == $c1 ? 'TRUE' : 'FALSE', PHP_EOL; // FALSE
echo 'c === c1:', $c === $c1 ? 'TRUE' : 'FALSE', PHP_EOL; // FALSE

unset($c1->t4);
$c1->t1 = 'd';  // 修改了一個值
echo 'c == c1:', $c == $c1 ? 'TRUE' : 'FALSE', PHP_EOL; // FALSE
echo 'c === c1:', $c === $c1 ? 'TRUE' : 'FALSE', PHP_EOL; // FALSE

這個例子中,我們進行了<、>的對比,在這種對比中,都是根據屬性值來進行比對的,而對比的順序也是屬性值的英文排序。當\$t2有了不相等的比較結果時,$t3就不會再進行比對了。此外,clone之后的對象并不是原來的實例對象了,所以clone后的對象和原對象是無法用===來獲得相等的結果的。當一個對象的屬性比另一個對象多時,這個對象也會比屬性少的對象大。

對象的比較其實和數組是有些類似的,但它們又有著些許的不同。一個重要的方面就是把握住它們都會進行屬性比較,另外還有就是===的差別,數組中===必須是所有屬性的類型都相同,而對象中則必須是同一個實例,而且對象只要是同一個實例,使用===就不會在乎它屬性值的不同了。

到此,關于“PHP中對象的區別”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

昆山市| 榆中县| 长宁县| 新田县| 肃宁县| 米易县| 丹寨县| 循化| 望奎县| 铁岭县| 文化| 桃园市| 辽宁省| 马山县| 平遥县| 奈曼旗| 万州区| 巨鹿县| 若羌县| 北海市| 麻阳| 巴林左旗| 雅安市| 阿拉尔市| 梨树县| 新泰市| 塔城市| 太原市| 临泉县| 永春县| 平阳县| 霍州市| 沙湾县| 遵义市| 玛曲县| 吴桥县| 黔东| 东丰县| 旬阳县| 广安市| 宁国市|