運算子優先權
每種程式語言都有運算符,運算符要學會靈活使用。
運算符擁有不同的優先權和結合方向。
<code><?php var_dump(1 <= 1 == 1); // true var_dump(true ? 0 : true ? 1 : 2); // 2 $a = 1; var_dump(++$a + $a++); // may print 4 or 5</code>
在需要的時候使用括號,可以增強程式碼的可讀性。
算術運算符
取模運算子的結果和被除數的符號相同。
賦值運算子將原變數的值拷貝到新變數中,有個例外就是碰到物件時,是以引用賦值的,除非明確使用clone
關鍵字來拷貝。
new運算子自動傳回一個參考。
位運算子
位移有一下幾個規則:
這一節的重點就是把手冊重點的幾個範例程式看懂吧。範例中字串的XOR運算比較難理解,這個以後再看。還有整數的位移,感覺理解就好吧。
比較運算子
普通等號==
只需型別轉換後兩值相等就回傳真。
如果比較一個數字和字串或比較涉及到數字內容的字串,則字串會被轉換為數值並且比較按照數值來進行。
<code><?php var_dump(0 == "a"); // true var_dump("1" == "01"); // true var_dump("10" == "1e1"); // true</code>
自PHP 5.3起,可以省略三元運算子中間那部分。表達式expr1 ?: expr3
在expr1真時傳回expr1,否則回傳expr3。三元運算子是從左到右計算的。
錯誤控制運算子
PHP支援一個錯誤控制運算子@,@運算子只對表達式有效。將其放在表達式前,該表達式可能產生的任何錯誤訊息都被忽略。
不能把它放在函數或類別的定義之前,也不能用於條件結構例如if和foreach等。
執行運算子
PHP支援一個執行運算子:反引號,就是鍵盤左上角那個。效果與函數shell_exec()
相同。
<code><?php $output = `systeminfo`; $outip = shell_exec('ipconfig'); echo "<pre class="brush:php;toolbar:false">$outip"; echo "
$output";
反引號運算子在啟動了安全模式或關閉了shell_exec()
時是無效的。
注意!反引號不能在雙引號字串中使用。
遞增遞減運算子
遞增/遞減運算子不影響布林值。
遞減NULL值也沒有效果,但是遞增NULL的結果是1。
在處理字元變數的算術運算時,PHP沿襲了Perl的習慣,而非C的。例如,在Perl中$a = 'Z'; $a++;
將把$a變成'AA'。
注意!字元變數只能遞增,不能遞減,並且只支援純字母(a-z和A-Z)。遞增/遞減其他字元字元變數則無效,原字串沒有變化。
<code><?php $z = 'z'; $Z = 'Z'; var_dump(++$z); // 'aa' var_dump(++$Z); // 'AA'</code>
邏輯運算子
||
比or
的優先順序高。 &&
比and
的優先順序高。
字串運算子
第一個是連接運算子.
,第二個是連接賦值運算子.=
。
數組運算符
聯合:$a + $b
。把右邊的陣列元素附加到左邊的陣列後面,兩個陣列中都有的鍵名,則只用左邊數組中的,有變動額被忽略。
相等:$a == $b
。具有相同的鍵值對。
全等:$a === $b
。具有相同的鍵值對,且順序和類型都相同。
不等:$a != $b
或$a <> $b
。
不全等:$a !== $b
。
數組中的單元如果具有相同的鍵名和值則比較時相等,不要在意順序和類型。
<code><?php $a = array("apple", "banana"); $b = array(1 => "banana", "0" => "apple"); var_dump($a); var_dump($b); var_dump($a == $b); var_dump($a === $b);</code>
輸出結果如下圖所示。
<code>array (size=2) 0 => string 'apple' (length=5) 1 => string 'banana' (length=6) array (size=2) 1 => string 'banana' (length=6) 0 => string 'apple' (length=5) boolean true boolean false</code>
類型運算符
PHP中有一個型別運算子instanceof
,用來判斷一個PHP變數是否屬於某一類別的實例。
<code><?php class MyParent {} class MyClass extends MyParent {} class NotMyClass {} interface MyInterface {} class InClass implements MyInterface {} $a = new MyClass; var_dump($a instanceof MyClass); // true var_dump($a instanceof NotMyClass); // false var_dump($a instanceof MyParent); // true $b = new InClass; var_dump($b instanceof MyInterface); // true $c = 'InClass'; var_dump($b instanceof $c); // true var_dump($c instanceof stdClass); // false</code>
注意,instanceof
不允許用來偵測常數。
(全文完)
以上就介紹了運算符 - PHP手冊筆記,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。