PHP 運算符
PHP 運算符主要包括:
1.算術運算符
2.賦值運算符
3.比較運算符
4.三元運算符
5.邏輯運算符
6.字符串運算符
7.錯誤控制運算符
算術運算符
運算符 說明 例子 運算結果
+ 加 $x = 2;
$y = $x+1; $y = 3
- 減 $x = 2;
$y = $x-1; $y = 1
* 乘 $x = 2;
$y = $x*3; $y = 6
/ 除,返回結果為浮點類型 $x = 6;
$y = $x/3; $y = 2
% 求余,返回結果為浮點類型 $x = 6;
$y = $x%4; $y = 2
++ 遞加,分為前加和後加
對布爾值和 NULL 無效 $x = 2;
++$x;(前加)
$x++;(後加) $x = 3
– 遞減,分為前遞減和後遞減
對布爾值和 NULL 無效 $x = 2;
–$x;(前減)
$x–;(後減) $x = 1
對於前加和後加,執行後的結果都是變量加1,其區別在於執行時返回結果不一樣,參考下面兩個例子:
1 <?php
2 $x = 2;
3 echo $x++; //輸出2
4 echo $x; //輸出3
5
6 $x = 2;
7 echo ++$x; //輸出3
8 echo $x; //輸出3
9 ?>
遞減同理。
賦值運算符
賦值運算符“=”用於賦值運算,賦值運算符的作用在於把右邊的值賦值給左邊變量:
1 $x = 2;
該例子將整型值 2 賦值給變量 $x。
賦值運算符其他用法
賦值運算符可以嵌套使用:
1 <?php
2 $y = ($x = 2) + 5; //結果為 $x=2,$y=7
3 ?>
賦值運算符的一些變形使用方法:
1 $y += $x;
實際上它等同於:
1 $y = $y + $x;
同理有:
1 $y -= $x;
2 $y *= $x;
3 $y /= $x;
4 $y %= $x;
5 $y .= $x; // . 為連接運算符,見字符串運算符
比較運算符
運算符 說明 例子 運算結果
== 等於 2 == 3 FALSE
!= 不等於,也可寫作<> 2 == 3 TRUE
> 大於 2 > 3 FALSE
< 小於 2 < 3 TRUE
>= 大於等於 2 >= 3 FALSE
<= 小於等於 2 <= 3 TRUE
比較運算符也可用於字符串比較。
三元運算符
三元可以視作是特殊的比較運算符:
(A) ? (B) : (C)
語法解釋:在 A求值為 TRUE 時整個表達式的值為 B,否則為 C。
例子:
1 $y = ($x == 2) ? $x : 1;
該例子判斷變量$x的值是否等於2,如果$x等於2,那麼$y的值就等於$x(也就是等於2),反之$y就等於1。
邏輯運算符
運算符 說明 例子 運算結果
&& 邏輯與,也可寫作 and $x = 2;
$y = 6;
$x && $y > 5 FALSE
|| 邏輯或,也可寫作 or $x = 2;
$y = 6;
$x && $y > 5 TRUE
! 邏輯非,取邏輯的反面 $x = 2;
$y = 6;
!($x > $y) TRUE
連接運算符
字符串運算符主要指連接運算符“.”,它將連接其左右參數字符串。
例子:
$x = "beijing";
$y = $x."你好"; //$y = "beijing你好"
如該例子所示,字符和變量共同輸出時需要使用連接運算符。
連接符與賦值運算符一起可構成連接賦值運算符:
$x = "beijing";
$x .="你好"; //$x = "beijing你好”
錯誤控制運算符
錯誤控制運算符:@,當將其放置在一個 PHP 表達式之前,該表達式可能產生的任何錯誤信息都被忽略掉。
<?php
/* 讀取文件 */
$my_file = @file ('file1') or
die ("打開文件失敗,錯誤信息: '$php_errormsg'");
?>
錯誤控制運算符經常用於在可能產生錯誤的地方屏蔽 PHP 的系統錯誤而提示友好的錯誤信息
運算符優先級的一個例外
今天在老王的技術手冊看到一個問題:
<?phpif ($a = 100 && $b = 200) { var_dump($a, $b);}
輸出是什麼?
這個問題, 咋一看或許覺得簡單, 但其實仔細推敲並不簡單,
如果說布爾與之前的部分, 是由於優先級的問題, 但是如果僅僅是優先級的問題的話, 那麼結果應該是:
$a = (100 && $b) = 200而實際上的結果, 確實高優先級的&&讓步給次優先級的=, 讓 $b = 200 先結合了.
究其原因, 是因為PHP並不完全遵守優先級的定義, 這個在PHP的手冊中也有說明:
Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.
這樣的設計, 個人不發表看法, 反正在C語言中, 這樣類似的語句是判定為語法錯的. PHP采用這樣的設計, 很可能是歷史原因,
有好奇的同學, 會想知道到底為什麼, 之前jayeeliu網友也問過:
laruence你好:
問一個php運算符優先級的問題
$t == 1 && $tt = 2
按照php運算符優先級應該是
(($t == 1) && $tt) = 2
這個順序執行,但實際上應該是
($t == 1) && ($tt = 2)
我有些不太理解。
其實也簡單, 運算符優先級是在存在二義性文法的時候的一種規約規則選擇的手段, 而PHP的語法分析文件定義中, 卻讓等號和T_BOOLEAN_AND(&&)之前不存在了規約沖突:
expr_without_variable: // 有隱規則存在, 相當於T_BOOLEAN_AND成為了"一元操作符". | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); }
exp最後, 順便說一下, PHP對應於T_BOOLEAN_AND 還定義了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 這倆個的優先級都低於等號, 於是就會有了, 很多PHP入門教材示例代碼中經典的:
$result = mysql_query(*) or die(mysql_error());
類似的還可以用or來實現三元操作符(?:)的功能:
$person = $who or $person = "laruence";
//等同於:
$person = empty($who)? "laruence" : $who;
php 恆等運算符(===)與比較運算符(==)的區別
恆等計算符,和比較運算符號“==”的區別是 “==”不會檢查條件式的表達式的類型,恆等計算符會同時檢查表達式的值與類型。
這主要和php是無類型語言有關,比如 NULL,FALSE,array(),”",0,”0″這幾個值如果用==他們是相等的,但是你如果判斷出某個值真正的返回值呢,就可以用 ===
$a = 0;
$b = FALSE;
$a === FALSE 不成立,但 $b === FALSE成立,如果是==, $a == FALSE 和 $b == FALSE都成立
===運算符還是很有用的,php有些內置函數成功會返回某個值,失敗會返回false,假如成功了但返回的是”"或者0之類的空值你怎麼判斷成功或者失敗呢?這是就可以用 === ,它可以區分變量類型。
參考:
比較運算符 例子 名稱 結果
$a == $b 等於 TRUE,如果 $a 等於 $b。
$a === $b 全等 TRUE,如果 $a 等於 $b,並且它們的類型也相同。(PHP 4 引進)
$a != $b 不等 TRUE,如果 $a 不等於 $b。
$a <> $b 不等 TRUE,如果 $a 不等於 $b。
$a !== $b 非全等 TRUE,如果 $a 不等於 $b,或者它們的類型不同。(PHP 4 引進)
$a < $b 小與 TRUE,如果 $a 嚴格小於 $b。
$a > $b 大於 TRUE,如果 $a 嚴格 $b。
$a <= $b 小於等於 TRUE,如果 $a 小於或者等於 $b。
$a >= $b 大於等於 TRUE,如果 $a 大於或者等於 $b。
如果比較一個整數和字符串,則字符串會被轉換為整數。如果比較兩個數字字符串,則作為整數比較。此規則也適用於 switch語句。
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("1" == "1e0"); // 1 == 1 -> true
switch ("a") {
case 0:
echo "0";
break;
case "a": // never reached because "a" is already matched with 0
echo "a";
break;
}
?>
說了一堆了我們再看看另一篇文章
運算符號(php)操作符號
按運算符號的功能分為
■算數運算符 + – * / % ++ –
■字符串運算符(連接運算符) .
■賦值運算符 = += -= *= %= .=
■比較(關系、條件)運算符> < >= <== == === != <> !==
■邏輯運算符 && and ||or ! not
■位運算符 & | ~ ^ << >> >>>
■其他的預算符? : ” -> -> :: & $
■()改變優先級別
%有兩個目的使用:整除運算;控制范圍,不要用小數,也不要用負數
%會把兩邊的數轉為整數後在整除
<?php
$year=2010;
if($yeay%4==0 && $year%100!=0 ||$year%400==0){
echo"今年是閏年";
}
控制范圍
$num=4600009;
echo $num%10;//9任何數和10 取余不會超過9
$a++(先用變量再自增1) ++$a(先自增1在用變量) $a-- --$a
<?php
$a=10;
$b=$a++;//$b=10 $a=11
$c=--$b;//$c=9 $b=9
// 9 + 11
$d=$c++ + ++$c;//$d=20 $c=11
$e=$d-- - --$d;//2
$name="ljw";
$age=25;
$heigh=1.75;
echo "我的名字是:{$name}我的年齡:{$age}我的身高{$hegit}";
echo'我的名字是:'.$name.'我的年齡:'.$age.'我的身高'.$hegit.;
echo "/$age=".$age;比較運算符———條件運算法符————-關系運算符
比較後的結果只有一種 boolean true false
===全等運算符
!==
—————===比較時不僅要求內容相同,也要求類型相同
&按位與(兩個都為1才為1) |按位或(有一個為1就為1) ^異或(不同為1相同為0) ~取反(0與1互換) 左移 << , 右移>> 無符號>>右移
—————————————————————————————–
$a=20;//16+4 00000000 00000000 00000000 00010100
—————————————————————————————–
$b=30;//16+8+4+2 00000000 00000000 00000000 00011110
—————————————————————————————–
$c= $a & $b;
echo $c;
&和|既可以做為邏輯運算符,又可以作為位運算符
&& ||
短路問題:&& 和||會發生短路
&& 在做運算時,如果前邊的數為false,則後面是否為true,整個表達式都是false
|| 在做運算是,如果前面的數是true,則後邊是否為false,整個表達式都為true;
&或|運算時,兩邊都會被執行。
其他運算符
條件?成立執行這裡 :不成立則執行這裡
反引號執行操作系統命令 “
$str=`ipconfig/all`;
echo '<pre>';
echo $str;
echo '</pre>'@getType();錯誤控制符,放在表達式前邊,表達式有錯誤的時候屏蔽掉,不推薦使用。