摘要:除法運算符總是返回浮點數。取模運算符的結果和被除數的符號正負號相同。使用位運算符時要特別注意優先級。太空船運算符組合比較符當小于等于大于時分別返回一個小于等于大于的值。遞增遞減運算符不影響布爾值。
一、算術運算符 1. 概覽
例子 | 名稱 | 結果 |
---|---|---|
$a + $b | 加法 | $a 和 $b 的和。 |
$a - $b | 減法 | $a 和 $b 的差。 |
$a * $b | 乘法 | $a 和 $b 的積。 |
$a / $b | 除法 | $a 除以 $b 的商。 |
$a % $b | 取余 | $a 除以 $b 的余數。 |
-$a | 取反 | $a 的相反數。 |
除法運算符總是返回浮點數。只有在下列情況例外:兩個操作數都是整數(或字符串轉換成的整數)并且正好能整除,這時它返回一個整數。
取模運算符的操作數在運算之前都會轉換成整數(除去小數部分)。
取模運算符 % 的結果和被除數的符號(正負號)相同。即 $a % $b 的結果和 $a 的符號相同。例如:
echo (5 % 3)." "; // prints 2 echo (5 % -3)." "; // prints 2 echo (-5 % 3)." "; // prints -2 echo (-5 % -3)." "; // prints -2二、位運算符 1. 概覽
例子 | 名稱 | 結果 | |
---|---|---|---|
$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”)。 |
位移在 PHP 中是數學運算。
向任何方向移出去的位都被丟棄。
左移時右側以零填充,符號位被移走意味著正負號不被保留。
右移時左側以符號位填充,意味著正負號被保留。
使用位運算符時要特別注意優先級。例如 :
$a & $b == true 先進行比較再進行按位與;
($a & $b) == true 則先進行按位與再進行比較。
例子 | 名稱 | 結果 |
---|---|---|
$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。 |
$a <=> $b | 太空船運算符(組合比較符) | 當$a小于、等于、大于$b時 分別返回一個小于、等于、大于0的integer 值。 PHP7開始提供 |
$a ?? $b ?? $c | NULL 合并操作符 | 從左往右第一個存在且不為 NULL 的操作數。如果都沒有定義且不為 NULL,則返回 NULL。PHP7開始提供。 |
如果比較一個數字和字符串或者比較涉及到數字內容的字符串,則字符串會被轉換為數值并且比較按照數值來進行。此規則也適用于 switch 語句。當用 === 或 !== 進行比較時則不進行類型轉換,因為此時類型和數值都要比對。
true var_dump("1" == "01"); // 1 == 1 -> true var_dump("10" == "1e1"); // 10 == 10 -> true var_dump(100 == "1e2"); // 100 == 100 -> true switch ("a") { case 0: echo "0"; break; case "a": // 永遠不會到達a,因為 "a" 已經與 0 匹配 echo "a"; break; } ?>3. 對于多種類型,比較運算符根據下表比較(按順序)
運算數1類型 | 運算數2類型 | 結果 |
---|---|---|
null 或 string | string | 將 NULL 轉換為 "",進行數字或詞匯比較 |
bool 或 null | 任何其它類型 | 轉換為 bool,FALSE < TRUE |
object | object | 內置類可以定義自己的比較,不同類不能比較,相同類和數組同樣方式比較屬性(PHP 4 中),PHP 5 有其自己的說明 |
string,resource 或 number | string,resource 或 number | 將字符串和資源轉換成數字,按普通數學比較 |
array | array | 具有較少成員的數組較小,如果運算數 1 中的鍵不存在于運算數 2 中則數組無法比較,否則挨個值比較(見下例) |
object | 任何其它類型 | object 總是更大 |
array | 任何其它類型 | array 總是更大 |
1 | 0 | -1 | "1" | "0" | "-1" | NULL | array() | "php" | "" | |
---|---|---|---|---|---|---|---|---|---|---|
TRUE | √ | × | √ | √ | × | √ | × | × | √ | × |
FALSE | × | √ | × | × | √ | × | √ | √ | × | √ |
1 | × | × | √ | × | × | × | × | × | × | |
0 | × | × | √ | × | √ | × | √ | √ | ||
-1 | × | × | √ | × | × | × | × | |||
"1" | × | × | × | × | × | × | ||||
"0" | × | × | × | × | × | |||||
"-1" | × | × | × | × | ||||||
NULL | √ | × | √ | |||||||
array() | × | × | ||||||||
"php" | × |
例子 | 名稱 | 效果 |
---|---|---|
++$a | 前加 | $a 的值加一,然后返回 $a。 |
$a++ | 后加 | 返回 $a,然后將 $a 的值加一。 |
--$a | 前減 | $a 的值減一, 然后返回 $a。 |
$a-- | 后減 | 返回 $a,然后將 $a 的值減一。 |
遞增/遞減運算符不影響布爾值。
遞減 NULL 值也沒有效果,但是遞增 NULL 的結果是 1。
在處理字符變量的算數運算時,PHP 沿襲了 Perl 的習慣,而非 C 的。
例如,在 Perl 中 $a = "Z"; $a++; 將把 $a 變成"AA",而在 C 中,a = "Z"; a++; 將把 a 變成 "["("Z" 的 ASCII 值是 90,"[" 的 ASCII 值是 91)。
注意字符變量只能遞增,不能遞減,并且只支持純字母(a-z 和 A-Z)。
遞增/遞減其他字符變量則無效,原字符串沒有變化。
例子 | 名稱 | 結果 |
---|---|---|
$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。 |
“與”和“或”有兩種不同形式運算符的原因是它們運算的優先級不同。
// "&&" 比 "and" 的優先級高 // 表達式 (true && false) 的結果被賦給 $g // 等同于:($g = (true && false)) $g = true && false; // 常量 true 被賦給 $h,false 被忽略 // 等同于:(($h = true) and false) $h = true and false;六、數組運算符 1. 概覽
例子 | 名稱 | 結果 |
---|---|---|
$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。 |
$a = array("apple", "banana"); $b = array(1 => "banana", "0" => "apple"); var_dump($a == $b); // bool(true) var_dump($a === $b); // bool(false)+ 運算符 和 array_merge() 的區別
當數組下標為字符時,遇到相同鍵名,+ 運算符會拋棄掉后面的值; array_merge()會用后面的值覆蓋前面的值。
當數組下標為數值時, array_merge()會保留所有的值,并重新索引數組。+ 運算符同樣會拋棄掉后面具有相同下標的值。
$arr1 = ["color" => "red", 10, 20]; $arr2 = [0, 1, "color" => "green"]; print_r($arr1 + $arr2); print_r(array_merge($arr1, $arr2));
輸出:
Array ( [color] => red [0] => 10 [1] => 20 ) Array ( [color] => green [0] => 10 [1] => 20 [2] => 0 [3] => 1 )七、運算符優先級 1. 概覽
結合方向 | 運算符 | 附加信息 |
---|---|---|
無 | clone new | clone 和 new |
左 | [ | array() |
右 | ** | 算術運算符 |
右 | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 類型和遞增/遞減 |
無 | instanceof | 類型 |
右 | ! | 邏輯運算符 |
左 | * / % | 算術運算符 |
左 | + - . | 算術運算符和字符串運算符 |
左 | << >> | 位運算符 |
無 | < <= > >= | 比較運算符 |
無 | == != === !== <> <=> | 比較運算符 |
左 | & | 位運算符和引用 |
左 | ^ | 位運算符 |
左 | | | 位運算符 |
左 | && | 邏輯運算符 |
左 | || | 邏輯運算符 |
左 | ?? | 比較運算符 |
左 | ? : | ternary |
右 | = += -= = *= /= .= %= &= |= ^= <<= >>= | 賦值運算符 |
左 | and | 邏輯運算符 |
左 | xor | 邏輯運算符 |
左 | or | 邏輯運算符 |
如果運算符優先級相同,那運算符的結合方向決定了該如何運算。例如,"-"是左聯的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且結果是 -4. 另外一方面,"="是右聯的,所以 $a = $b = $c 等同于 $a = ($b = $c)。
沒有結合的相同優先級的運算符不能連在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表達式 1 <= 1 == 1 是合法的, 因為 == 的優先級低于 <=。
括號的使用,哪怕在不是必要的場合下,通過括號的配對來明確標明運算順序,而非靠運算符優先級和結合性來決定,通常能夠增加代碼的可讀性。
著重記憶:遞增/遞減 > ! > 算術運算符 > 大小比較 > (不)相等比較 > 引用 > 位運算符(^) > 位運算符(|) > 邏輯與 > 邏輯或 > 三目 > 賦值 > and > xor > or
3. 實戰例題請寫出下列程序輸出的結果
$a = 0; $b = 0; if ($a = 3 > 0 || $b = 3 > 0) { $a++; $b++; echo $a. " "; echo $b. " "; }例題分析
1.題目中包含 = > || 三種運算符,優先級順序為 > > || > =
2.$a = 3 > 0 || $b = 3 > 0 等價于 $a = ( ( 3 > 0 ) || $b = ( 3 > 0 ) )
3.( 3 > 0 ) 為 true,因此不會再運算 || 后面的式子
4.$a = true,所以程序可以改寫為
$a = 0; $b = 0; if ($a = true) { $a++; $b++; echo $a. " "; echo $b. " "; }
5.因為 “遞增/遞減運算符不影響布爾值”,所以 $a++ 后,$a 的值依然是 true,echo true,會輸出 1
6.因為 $b = 0 ,所以 $b++ 后,$b 的值為 1
7.輸出結果為
1 1
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29404.html
摘要:使用中文函數名和變量名面積長寬長寬面積合法,輸出中文符號函數名。類型聲明類型聲明允許函數在調用時要求參數為特定類型。需要使用自己的包裝函數來將這些結構用作可變函數。匿名函數目前是通過類來實現的。 一、函數的定義 1. 函數的命名規則 函數名可以包含字母、數字、下劃線,不能以數字開頭。 function Func_1(){ } //合法 function func1(){ } //合法 ...
摘要:是決定正則表達式匹配規則的主要部分。二分隔符分隔符的選擇當使用函數的時候,正則表達式必須由分隔符閉合包裹。果分隔符經常在正則表達式內出現,最好使用其他分隔符來提高可讀性。需要將一個字符串放入正則表達式中使用時,可以用函數對其進行轉義。 一、簡介 1. 什么是正則表達式 正則表達式(Regular Expression)就是用某種模式去匹配一類字符串的一種公式。正則表達式使用單個字符串來...
摘要:聲明靜態變量時不能用表達式的結果對其賦值正確錯誤使用表達式的結果賦值錯誤使用表達式的結果賦值靜態變量與遞歸函數靜態變量提供了一種處理遞歸函數的方法。 一、變量的定義 1. 變量的命名規則 變量名可以包含字母、數字、下劃線,不能以數字開頭。 $Var_1 = foo; // 合法 $var1 = foo; // 合法 $_var1 = foo; // 合法 $Var-1 = foo; /...
摘要:支持崩潰后的安全恢復。的使用場景更新密集的表存儲引擎特別適合處理多重并發的更新請求。外鍵約束支持外鍵的存儲引擎只有。引擎是及之前版本的默認存儲引擎。文件存儲表的索引。引擎存儲引擎是引擎的變種。 MySQL基礎知識點整理 - 存儲引擎 0. 查看 MySQL 支持的存儲引擎 可以在 mysql 客戶端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...
閱讀 1370·2021-11-22 09:34
閱讀 2580·2021-11-12 10:36
閱讀 1111·2021-11-11 16:55
閱讀 2324·2020-06-22 14:43
閱讀 1457·2019-08-30 15:55
閱讀 1975·2019-08-30 15:53
閱讀 1764·2019-08-30 10:50
閱讀 1217·2019-08-29 12:15