運算符 - PHP手冊筆記

運算符優先級

每種編程語言都有運算符,運算符要學會靈活使用。php

運算符擁有不一樣的優先級和結合方向。shell

<?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

在須要的時候使用括號,能夠加強代碼的可讀性。編程

算術運算符

取模運算符的結果和被除數的符號相同。數組

賦值運算符將原變量的值拷貝到新變量中,有個例外就是碰到對象時,是以引用賦值的,除非明確使用clone關鍵字來拷貝。安全

new運算符自動返回一個引用。app

位運算符

位移有一下幾個規律:編程語言

  • 向任何方向移出去的位都被丟棄。函數

  • 左移時以零填充,且正負號不被保留。code

  • 右移時以符號位填充,意味着正負號保留。對象

這一節的重點就是把手冊重點的幾個示例程序看懂吧。示例中字符串的XOR運算比較難理解,這個之後再看。還有整數的位移,感受理解就好吧。

比較運算符

普通等號==只需類型轉換後兩值相等就返回真。

若是比較一個數字和字符串或者比較涉及到數字內容的字符串,則字符串會被轉換爲數值而且比較按照數值來進行。

<?php 
var_dump(0 == "a");  // true
var_dump("1" == "01");  // true
var_dump("10" == "1e1");  // true

自PHP 5.3起,能夠省略三元運算符中間那部分。表達式expr1 ?: expr3在expr1真時返回expr1,不然返回expr3。三元運算符是從左往右計算的。

錯誤控制運算符

PHP支持一個錯誤控制運算符@,@運算符只對表達式有效。將其放在表達式前,該表達式可能產生的任何錯誤信息都被忽略掉。

不能把它放在函數或類的定義以前,也不能用於條件結構例如if和foreach等。

執行運算符

PHP支持一個執行運算符:反引號,就是鍵盤左上角那個。效果與函數shell_exec()相同。

<?php 
$output = `systeminfo`;
$outip = shell_exec('ipconfig');
echo "<pre>$outip</pre>";
echo "<pre>$output</pre>";

反引號運算符在激活了安全模式或者關閉了shell_exec()時是無效的。

注意!反引號不能在雙引號字符串中使用。

遞增遞減運算符

遞增/遞減運算符不影響布爾值。
遞減NULL值也沒有效果,可是遞增NULL的結果是1。

在處理字符變量的算術運算時,PHP沿襲了Perl的習慣,而非C的。例如,在Perl中$a = 'Z'; $a++;將把$a變成'AA'。

注意!字符變量只能遞增,不能遞減,而且只支持純字母(a-z和A-Z)。遞增/遞減其餘字符字符變量則無效,原字符串沒有變化。

<?php 
$z = 'z';
$Z = 'Z';
var_dump(++$z);  // 'aa'
var_dump(++$Z);  // 'AA'

邏輯運算符

||or的優先級高。&&and的優先級高。

字符串運算符

第一個是鏈接運算符.,第二個是鏈接賦值運算符.=

數組運算符

  1. 聯合:$a + $b。把右邊的數組元素附加到左邊的數組後面,兩個數組中都有的鍵名,則只用左邊數組中的,有變更額被忽略。

  2. 相等:$a == $b。具備相同的鍵值對。

  3. 全等:$a === $b。具備相同的鍵值對,而且順序和類型都相同。

  4. 不等:$a != $b$a <> $b

  5. 不全等:$a !== $b

數組中的單元若是具備相同的鍵名和值則比較時相等,不要在乎順序和類型。

<?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);

輸出結果以下所示。

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

類型運算符

PHP中有一個類型運算符instanceof,用於肯定一個PHP變量是否屬於某一類的實例。

<?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

注意,instanceof不容許用來檢測常量。

(全文完)

相關文章
相關標籤/搜索