php中運算符使用方法總結
來源:程序員人生 發布時間:2014-06-18 05:09:34 閱讀次數:2888次
算術運算符
1、算術運算符:+、-、*、/、%.
2、遞增/遞減運算符:如$a++,$a--,++$a,--$a.
實例代碼如下:
- $a=10;
- $b=5;
- $c=$a++;
- $d=$b--;
- echo '$a='.$a."||".'$c='.$c.'
'; - echo '$b='.$b."||".'$d='.$d.'
'; - ?>
- $a=10;
- $b=5;
- $c=++$a;
- $d=--$b;
- echo '$a='.$a."||".'$c='.$c.'
'; - echo '$b='.$b."||".'$d='.$d.'
'; - ?>
三元運算符
(expr1) ? (expr2) : (expr3);
解釋:如果條件“expr1”成立,則執行語句“expr2”,否則執行“expr3”.
以下語句的語法是正確的,它們以小解引號的方式忽略了第二或第三“元”:
實例代碼如下:
- $a>$b ? print "Yes" : "";
- $a>$b ? '': print 'No';
應該注意的是:在使用三元運算符時,建議使用print語句替代echo語句.注意下列一串語句的理解:
實例代碼如下:
- $str = $_GET['abc'] ? 'wangjinbo' : 'wjb';
這里不能理解為:當$str等于$_GET['abc'] 時,賦值為 'wangjinbo' 否則賦值為 'wjb';因為一:判斷相等應該用==;因原二:三元算符的語法是如上所示:(expr1) ? (expr2) : (expr3),顯然上面的二元,三元'wangjinbo'或'wjb'不能單獨構成一個有意義的表達式;正確理解是:當$_GET['abc']為空(也就是否,PHP中'',null,0,undifine,都等效布爾值false)時,將$str賦值為'wangjinbo',否則賦值為'wjb';
邏輯運算符:
實例代碼如下:
- $a=10;$b=7;
- if($a++>8 || $b++>7){
- echo 'OK!';
- }
- echo 'a='.$a.'b='.$b;
- 改變一下
- $a=10;$b=7;
- if($a++>10 && $b++>7){
- echo 'OK!';
- }
- echo 'a='.$a.'b='.$b;
細節:and && 都表示邏輯與 ,他們的區別在什么地方?
主要體現在優先級上面,and 的優先級
實例代碼如下:
- and< = <&&
- or < = < ||
- $a=false || true;
- $b=false or true;
- var_dump($a,$b);
位運算符
位移在 PHP 中是數學運算.向任何方向移出去的位都被丟棄.左移時右側以零填充,符號位被移走意味著正負號不被保留.右移時左側以符號位填充,意味著正負號被保留.要用括號確保想要的優先級.例如 $a & $b == true 先進行比較再進行按位與;而 ($a & $b) == true 則先進行按位與再進行比較.
要注意數據類型的轉換.如果左右參數都是字符串,則位運算符將對字符的 ASCII 值進行操作.
PHP的ini設定error_reporting 使用了按位的值,提供了關閉某個位的真實例子.要顯示除了提示級別之外的所有錯誤,php.ini 中是這樣用的:
E_ALL & ~E_NOTICE
具體運作方式是先取得 E_ALL 的值:
00000000000000000111011111111111
再取得 E_NOTICE 的值:
00000000000000000000000000001000
然后通過 ~ 將其取反:
11111111111111111111111111110111
最后再用按位與 AND(&)得到兩個值中都設定了(為 1)的位:
00000000000000000111011111110111
另外一個方法是用按位異或 XOR(^)來取得只在其中一個值中設定了的位:E_ALL ^ E_NOTICE
error_reporting 也可用來演示怎樣置位.只顯示錯誤和可恢復錯誤的方法是:E_ERROR | E_RECOVERABLE_ERROR
也就是將 E_ERROR
00000000000000000000000000000001和 E_RECOVERABLE_ERROR
00000000000000000001000000000000
用按位或 OR(|)運算符來取得在任何一個值中被置位的結果:
00000000000000000001000000000001
Example #1 整數的 AND,OR 和 XOR 位運算符
實例代碼如下:
-
-
-
-
- $format = '(%1$2d = %1$04b) = (%2$2d = %2$04b)'
- . ' %3$s (%4$2d = %4$04b)' . "n";
- echo <<
- --------- --------- -- ---------
- result value op test
- --------- --------- -- ---------
- EOH;
-
-
-
-
- $values = array(0, 1, 2, 4, 8);
- $test = 1 + 4;
- echo "n Bitwise AND n";
- foreach ($values as $value) {
- $result = $value & $test;
- printf($format, $result, $value, '&', $test);
- }
- echo "n Bitwise Inclusive OR n";
- foreach ($values as $value) {
- $result = $value | $test;
- printf($format, $result, $value, '|', $test);
- }
- echo "n Bitwise Exclusive OR (XOR) n";
- foreach ($values as $value) {
- $result = $value ^ $test;
- printf($format, $result, $value, '^', $test);
- }
- ?>
以上例程會輸出:
--------- --------- -- ---------
result value op test
--------- --------- -- ---------
Bitwise AND
( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101)
Bitwise Inclusive OR
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)
Bitwise Exclusive OR (XOR)
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)
比較運算符
如果比較一個數字和字符串或者比較涉及到數字內容的字符串,則字符串會被轉換為數值并且比較按照數值來進行.此規則也適用于 switch 語句.當用 === 或 !== 進行比較時則不進行類型轉換,因為此時類型和數值都要比對.
實例代碼如下:
- var_dump(0 == "a");
- var_dump("1" == "01");
- var_dump("10" == "1e1");
- var_dump(100 == "1e2");
- switch ("a") {
- case 0:
- echo "0";
- break;
- case "a":
- echo "a";
- break;
- }
- ?>
對于多種類型,比較運算符根據下表比較(按順序).
比較多種類型 運算數 1 類型 運算數 2 類型 結果 null 或 string string 將 NULL
轉換為 "",進行數字或詞匯比較 bool 或 null 任何其它類型 轉換為 bool,FALSE
< TRUE
object object 內置類可以定義自己的比較,不同類不能%
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈