1. 程式人生 > >PHP運算符

PHP運算符

php

總括

  運算符可按照其能接受幾個值來分組。一元運算符只能接受一個值,例如 !(邏輯取反運算符)或 ++(遞增運算符)。二元運算符可接受兩個值,例如熟悉的算術運算符 +(加)和 -(減),大多數 PHP 運算符都是這種。最後是唯一的三元運算符 ? :,可接受三個值;通常就簡單稱之為“三元運算符”

  運算符優先級指定了兩個表達式綁定得有多“緊密”。例如,表達式 1 + 5 * 3 的結果是 16 而不是 18 是因為乘號(“*”)的優先級比加號(“+”)高。必要時可以用括號來強制改變優先級。例如:(1 + 5) * 3 的值為 18

  如果運算符優先級相同,那運算符的結合方向決定了該如何運算。例如,"-"是左聯的,那麽 1 - 2 - 3 就等同於 (1 - 2) - 3 並且結果是 -4. 另外一方面,"="是右聯的,所以

a=a=b = cc等同於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 表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉

  [註意][email protected],@不會屏蔽解析錯誤的信息,不能把它放在函數或類的定義之前,也不能用於條件結構如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)?>


PHP運算符