您好,登錄后才能下訂單哦!
運算符可按照其能接受幾個值來分組。一元運算符只能接受一個值,例如 !(邏輯取反運算符)或 ++(遞增運算符)。二元運算符可接受兩個值,例如熟悉的算術運算符 +(加)和 -(減),大多數 PHP 運算符都是這種。最后是唯一的三元運算符 ? :,可接受三個值;通常就簡單稱之為“三元運算符”
運算符優先級指定了兩個表達式綁定得有多“緊密”。例如,表達式 1 + 5 * 3 的結果是 16 而不是 18 是因為乘號(“*”)的優先級比加號(“+”)高。必要時可以用括號來強制改變優先級。例如:(1 + 5) * 3 的值為 18
如果運算符優先級相同,那運算符的結合方向決定了該如何運算。例如,"-"是左聯的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且結果是 -4. 另外一方面,"="是右聯的,所以 a=a=b = c等同于c等同于a = (b=b=c)
[注意]沒有結合的相同優先級的運算符不能連在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表達式 1 <= 1 == 1 是合法的, 因為 == 的優先級低于 <=
優先級
結合方向 運算符 附加信息 無 clone new clone 和 new左 [ array() 右 ++ -- ~ 類型和遞增/遞減 無 instanceof 類型 右 ! 邏輯運算符 左 * / % 算術運算符 左 + - . 算術運算符和字符串運算符 左 << >> 位運算符 無 < <= > >= 比較運算符 無 == != === !== <> <=> 比較運算符 左 & 位運算符和引用 左 ^ 位運算符 左 | 位運算符 左 && 邏輯運算符 左 || 邏輯運算符 左 ?? 比較運算符 左 ? : ternary 右 = += -= *= **= /= .= %= &= |= ^= <<= >>= 賦值運算符 左 and 邏輯運算符 左 xor 邏輯運算符 左 or 邏輯運算符
-$a 取反 $a 的負值。$a + $b 加法 $a 和 $b 的和。$a - $b 減法 $a 和 $b 的差。$a * $b 乘法 $a 和 $b 的積。$a / $b 除法 $a 除以 $b 的商。$a % $b 取模 $a 除以 $b 的余數
除法運算符總是返回浮點數。只有在下列情況例外:兩個操作數都是整數(或字符串轉換成的整數)并且正好能整除,這時它返回一個整數
取模運算符的操作數在運算之前都會轉換成整數(除去小數部分)
取模運算符 % 的結果和被除數的符號(正負號)相同。即 a % b 的結果和 a 的符號相同
<?phpecho (5 % 3)."\n"; // prints 2echo (5 % -3)."\n"; // prints 2echo (-5 % 3)."\n"; // prints -2echo (-5 % -3)."\n"; // prints -2?>
基本的賦值運算符是“=”,它實際上意味著把右邊表達式的值賦給左邊的運算數
賦值運算表達式的值也就是所賦的值。也就是說,“$a = 3”的值是 3
<?php$a = ($b = 4) + 5; // $a 現在成了 9,而 $b 成了 4。?>
在基本賦值運算符之外,還有適合于所有二元算術,數組集合和字符串運算符的“組合運算符”,這樣可以在一個表達式中使用它的值并把表達式的結果賦給它
x = y x += y x -= y x *= y x /= y x %= y
<?php$a = 3;$a += 5; // $a = $a + 5;$b = "Hello ";$b .= "There!"; //$b = $b . "There!";?>
引用賦值
PHP 支持引用賦值,引用賦值意味著兩個變量指向了同一個數據,沒有拷貝任何東西
<?php$a = 3;$b = &$a; // $b 是 $a 的引用print "$a\n"; // 輸出 3print "$b\n"; // 輸出 3$a = 4; // 修改 $aprint "$a\n"; // 輸出 4print "$b\n"; // 也輸出 4,因為 $b 是 $a 的引用,因此也被改變?>
遞增/遞減
例子 名稱 效果++$a 前加 $a 的值加一,然后返回 $a$a++ 后加 返回 $a,然后將 $a 的值加一--$a 前減 $a 的值減一, 然后返回 $a$a-- 后減 返回 $a,然后將 $a 的值減一
<?php$x=10; echo ++$x; // 輸出 11$y=10; echo $y++; // 輸出 10$z=5;echo --$z; // 輸出 4$i=5;echo $i--; // 輸出 5?>
位運算符允許對整型數中指定的位進行求值和操作
例子 名稱 結果$a & $b And(按位與) 將把 $a 和 $b 中都為 1 的位設為 1$a | $b Or(按位或) 將把 $a 和 $b 中任何一個為 1 的位設為 1$a ^ $b Xor(按位異或) 將把 $a 和 $b 中一個為 1 另一個為 0 的位設為 1 ~ $a Not(按位取反) 將 $a 中為 0 的位設為 1,反之亦然$a << $b Shift left(左移) 將 $a 中的位向左移動 $b 次(每一次移動都表示“乘以 2”)$a >> $b Shift right(右移) 將 $a 中的位向右移動 $b 次(每一次移動都表示“除以 2”)
比較運算符,如同它們名稱所暗示的,允許對兩個值進行比較
例子 名稱 結果$a == $b 等于 TRUE,如果類型轉換后 $a 等于 $b$a === $b 全等 TRUE,如果 $a 等于 $b,并且它們的類型也相同$a != $b 不等 TRUE,如果類型轉換后 $a 不等于 $b$a <> $b 不等 TRUE,如果類型轉換后 $a 不等于 $b$a !== $b 不全等 TRUE,如果 $a 不等于 $b,或者它們的類型不同$a < $b 小與 TRUE,如果 $a 嚴格小于 $b$a > $b 大于 TRUE,如果 $a 嚴格大于 $b$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b
如果比較一個數字和字符串或者比較涉及到數字內容的字符串,則字符串會被轉換為數值并且比較按照數值來進行。此規則也適用于 switch 語句。當用 === 或 !== 進行比較時則不進行類型轉換,因為此時類型和數值都要比對
<?phpvar_dump(0 == "a"); // 0 == 0 -> truevar_dump("1" == "01"); // 1 == 1 -> truevar_dump("10" == "1e1"); // 10 == 10 -> truevar_dump(100 == "1e2"); // 100 == 100 -> trueswitch ("a") {case 0: echo "0";//輸出0 break;case "a": echo "a"; break; }?>
比較多種類型
運算數 1 類型 運算數 2 類型 結果null 或 string string 將 NULL 轉換為 "",進行數字或詞匯比較 bool 或 null 任何其它類型 轉換為 bool,FALSE < TRUEobject object 內置類可以定義自己的比較,不同類不能比較string、resource、number string、resource、number 將字符串和資源轉換成數字,按普通數學比較array array 具有較少成員的數組較小,如果運算數 1 中的鍵不存在于運算數 2 中則數組無法比較,否則挨個值比較object 任何其它類型 object 總是更大array 任何其它類型 array 總是更大
三元運算符
"?:"三元運算符是一個比較運算符,對于表達式(expr1)?(expr2):(expr3),如果expr1的值為true,則此表達式的值為expr2,否則為expr3
<?php $a = 78;//成績 $b = $a >=60?"及格":"不及格"; echo $b;//及格?>
PHP 支持一個錯誤控制運算符:@。當將其放置在一個 PHP 表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉
[注意]錯誤控制前綴@運算符只對表達式有效,@不會屏蔽解析錯誤的信息,不能把它放在函數或類的定義之前,也不能用于條件結構如if和foreach等
<?php$a = 1;echo @ $a;//1$b;echo @ $b;//不報錯?>
例子 名稱 結果$a and $b And(邏輯與) TRUE,如果 $a 和 $b 都為 TRUE$a or $b Or(邏輯或) TRUE,如果 $a 或 $b 任一為 TRUE$a xor $b Xor(邏輯異或) TRUE,如果 $a 或 $b 任一為 TRUE,但不同時是! $a Not(邏輯非) TRUE,如果 $a 不為 TRUE$a && $b And(邏輯與) TRUE,如果 $a 和 $b 都為 TRUE$a || $b Or(邏輯或) TRUE,如果 $a 或 $b 任一為 TRUE
<?php// foo() 根本沒機會被調用,被運算符“短路”了$a = (false && foo());$b = (true || foo());$c = (false and foo());$d = (true or foo());// -------------------- // "||" 比 "or" 的優先級高 // 表達式 (false || true) 的結果被賦給 $e // 等同于:($e = (false || true))$e = false || true;// 常量 false 被賦給 $f,true 被忽略 // 等同于:(($f = false) or true)$f = false or true;var_dump($e, $f);//bool(true) bool(false) // -------------------- // "&&" 比 "and" 的優先級高 // 表達式 (true && false) 的結果被賦給 $g // 等同于:($g = (true && false))$g = true && false;// 常量 true 被賦給 $h,false 被忽略 // 等同于:(($h = true) and false)$h = true and false;var_dump($g, $h);//bool(false) bool(true)?>
有兩個字符串運算符。第一個是連接運算符(“.”),它返回其左右參數連接后的字符串。第二個是連接賦值運算符(“.=”),它將右邊參數附加到左邊的參數之后
<?php$a = "Hello ";$b = $a . "World!"; // now $b contains "Hello World!"$a = "Hello ";$a .= "World!"; // now $a contains "Hello World!"?>
例子 名稱 結果$a + $b 聯合 $a 和 $b 的聯合$a == $b 相等 如果 $a 和 $b 具有相同的鍵/值對則為 TRUE$a === $b 全等 如果 $a 和 $b 具有相同的鍵/值對并且順序和類型都相同則為 TRUE$a != $b 不等 如果 $a 不等于 $b 則為 TRUE$a <> $b 不等 如果 $a 不等于 $b 則為 TRUE$a !== $b 不全等 如果 $a 不全等于 $b 則為 TRUE
<?php$x = array("a" => "red", "b" => "green"); $y = array("c" => "blue", "d" => "yellow"); $z = $x + $y; var_dump($z);//array(4) { ["a"]=> string(3) "red" ["b"]=> string(5) "green" ["c"]=> string(4) "blue" ["d"]=> string(6) "yellow" } echo "<br>";var_dump($x == $y);//bool(false)echo "<br>";var_dump($x === $y);//bool(false)echo "<br>";var_dump($x != $y);//bool(true)echo "<br>";var_dump($x <> $y);//bool(true)echo "<br>";var_dump($x !== $y);//bool(true)?>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。