淺談php中&&/and、||/or中的坑

在邏輯運算符中,提到與和或,我們可能立刻想到的是&&、||,在php中還有and、or.然而and和or中有一個小小的坑,請看下面這段代碼:

<?php

	$a = true;
	$b = false;

	$c1 = $a && $b;
	var_dump($c1); //1.false

	$c2 = $a and $b;
	var_dump($c2); //2.true

	$c3 = $b and $a;
	var_dump($c3); //3.false

	$c4 = $a or $b;
	var_dump($c4); //true
	
	$c5 = $b or $a;
	var_dump($c5); //false
?>

1處打印的結果爲false不用多講,2處打印的是true可能讓我們困惑,當你看到3處打印的結果後可能更加困惑,哈哈
出現這種現象的原因在於優先級,and 、or的優先級很低,比=號還低,拿2來說:
由於and的優先級低於=,那麼
$c2 = $a and $b; 等價於 ($c2 = $a) and $b;
$c2先是被賦值爲true,然後和$b進行或運算,由於$c2 和$b進行或運算的結果並沒有賦值給其他變量,所以運算的結果並沒有保存下來,所以整個表達式運算的結果仍是true。
我們在使用邏輯運算符and、or時應小心其優先級,否則可能會出現錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章