4)比較運算符
== 值是否相等
如果值相等則是true,不相等就是 false
$a=10;
$b=10;
var_dump($a==$b); //true
=== 全等(值要相等,類型也要相等)
$a=11;
$b='11';
var_dump($a==$b); //true, php裡'11'會被強制類型轉換成int 11
var_dump($a===$b); //false
!= 值是否不相等
如果兩邊操作數的值不相等結果是true,否則就是false
<> 值是否不相等,和上面!=用法相同
!== 不全等
$a=11;
$b='11';
var_dump($a!=$b); //false
var_dump($a!==$b); //true
<、>、<=、>=
注:一般不用echo輸出的原因是輸出的值是布爾類型,看不出變量的具體類型
5)邏輯運算符
參與邏輯運算的表達式是布爾類型的值,如果不是布爾類型的值會被自動轉換成布爾類型的值,然後再參與運算
邏輯與:&&
左右表達式兩邊的結果都是true的時候結果為true,否則隻要其中一個為false,運算的結果就是false
$a=true;
$b=false;
var_dump($a && $b); //false
注:以下的值被認為是false,其他的值都被認為true
布爾值false、0、浮點型0.0、空白字元串和字元串0、沒有成員的數組、NULL
邏輯或:||
左右兩邊的表達式有一個是true,那麼結果就是true
邏輯異或:xor
左右兩邊表達式的值不一樣的時候結果就是true,反正為false
$a=false;
$b=true;
var_dump($a xor $b); //true
邏輯非:!
$a=true;
var_dump(!$a); //false
6)位運算符(不怎麼用)
7)其他運算符:
三元運算 表達式1 ? 表達式2 :表達式3
如果表達式1的值為true,那麼執行表達式2,否則就執行表達式3
$a=false ? 10 : 20;
echo $a; //20
系統指令執行符(設計跨平台):``
$a=`ipconfig`;
$b=`ipconfig`;
var_dump($b);
屏蔽表達式可能的錯誤:@
echo @$a;
注:@一定是放在表達式前面
=>(數組)
->(對象)
instanceof(對象)
8)運算符的優先級
優先級:誰的優先級高先算誰
結合方向:規定了從哪個方向開始算
優先級、結合方向歸納:
1. 無,遞增遞減
2. 右,邏輯非
3. 左,乘、除、取餘
4. 左,加、減、字元串連接配接符
5. 無,包含大于或小于号的運算符
6. 無,不包含大于或小于号的運算符
7. 左,邏輯與 &&
8. 左,邏輯或 ||
9. 左,?:
10. 右,指派運算符
11. 左,邏輯異或 xor
注:使用括号可以增強代碼的可讀性
短路問題:
隻要有邏輯運算符(邏輯與、邏輯或),那麼運算結果就是一個true或false
那運算的過程就不重要了
$a=false;
$b=1;
$a && ++$b;
echo $b; //短路,上面++$b被短路了,$b還是1