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