在php中運(yùn)算符是我們程序開發(fā)中最基本的一個(gè)知識(shí)點(diǎn)了,下面我來(lái)給各位同學(xué)介紹在php中PHP 運(yùn)算符一的些常用用法介紹.
PHP 運(yùn)算符
PHP 運(yùn)算符主要包括:
1.算術(shù)運(yùn)算符
2.賦值運(yùn)算符
3.比較運(yùn)算符
4.三元運(yùn)算符
5.邏輯運(yùn)算符
6.字符串運(yùn)算符
7.錯(cuò)誤控制運(yùn)算符
算術(shù)運(yùn)算符
運(yùn)算符 說(shuō)明 例子 運(yùn)算結(jié)果
+ 加 $x = 2;
$y = $x+1; $y = 3
- 減 $x = 2;
$y = $x-1; $y = 1
* 乘 $x = 2;
$y = $x*3; $y = 6
/ 除,返回結(jié)果為浮點(diǎn)類型 $x = 6;
$y = $x/3; $y = 2
% 求余,返回結(jié)果為浮點(diǎn)類型 $x = 6;
$y = $x%4; $y = 2
++ 遞加,分為前加和后加
對(duì)布爾值和 NULL 無(wú)效 $x = 2;
++$x;(前加)
$x++;(后加) $x = 3
– 遞減,分為前遞減和后遞減
對(duì)布爾值和 NULL 無(wú)效 $x = 2;
–$x;(前減)
$x–;(后減) $x = 1
對(duì)于前加和后加,執(zhí)行后的結(jié)果都是變量加1,其區(qū)別在于執(zhí)行時(shí)返回結(jié)果不一樣,參考下面兩個(gè)例子:
遞減同理.
賦值運(yùn)算符
賦值運(yùn)算符“=”用于賦值運(yùn)算,賦值運(yùn)算符的作用在于把右邊的值賦值給左邊變量:
1 $x = 2;
該例子將整型值 2 賦值給變量 $x.
賦值運(yùn)算符其他用法
賦值運(yùn)算符可以嵌套使用:
賦值運(yùn)算符的一些變形使用方法:
1 $y += $x;
實(shí)際上它等同于:
同理有:
$y -= $x;
$y *= $x;
$y /= $x;
$y %= $x;
$y .= $x; // . 為連接運(yùn)算符,見(jiàn)字符串運(yùn)算符
比較運(yùn)算符
運(yùn)算符 說(shuō)明 例子 運(yùn)算結(jié)果
== 等于 2 == 3 FALSE
!= 不等于,也可寫作<> 2 == 3 TRUE
> 大于 2 > 3 FALSE
< 小于 2 < 3 TRUE
>= 大于等于 2 >= 3 FALSE
<= 小于等于 2 <= 3 TRUE
比較運(yùn)算符也可用于字符串比較.
三元運(yùn)算符
三元可以視作是特殊的比較運(yùn)算符:
(A) ? (B) : (C)
語(yǔ)法解釋:在 A求值為 TRUE 時(shí)整個(gè)表達(dá)式的值為 B,否則為 C.
例子:
1.$y = ($x == 2) ? $x : 1;
該例子判斷變量$x的值是否等于2,如果$x等于2,那么$y的值就等于$x(也就是等于2),反之$y就等于1.
邏輯運(yùn)算符
運(yùn)算符 說(shuō)明 例子 運(yùn)算結(jié)果
&& 邏輯與,也可寫作 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
連接運(yùn)算符
字符串運(yùn)算符主要指連接運(yùn)算符“.”,它將連接其左右參數(shù)字符串.
例子:
如該例子所示,字符和變量共同輸出時(shí)需要使用連接運(yùn)算符.
連接符與賦值運(yùn)算符一起可構(gòu)成連接賦值運(yùn)算符:
錯(cuò)誤控制運(yùn)算符
錯(cuò)誤控制運(yùn)算符:@,當(dāng)將其放置在一個(gè) PHP 表達(dá)式之前,該表達(dá)式可能產(chǎn)生的任何錯(cuò)誤信息都被忽略掉.
錯(cuò)誤控制運(yùn)算符經(jīng)常用于在可能產(chǎn)生錯(cuò)誤的地方屏蔽 PHP 的系統(tǒng)錯(cuò)誤而提示友好的錯(cuò)誤信息,運(yùn)算符優(yōu)先級(jí)的一個(gè)例外
今天在老王的技術(shù)手冊(cè)看到一個(gè)問(wèn)題:
輸出是什么?
這個(gè)問(wèn)題, 咋一看或許覺(jué)得簡(jiǎn)單, 但其實(shí)仔細(xì)推敲并不簡(jiǎn)單,如果說(shuō)布爾與之前的部分, 是由于優(yōu)先級(jí)的問(wèn)題, 但是如果僅僅是優(yōu)先級(jí)的問(wèn)題的話, 那么結(jié)果應(yīng)該是:
$a = (100 && $b) = 200而實(shí)際上的結(jié)果, 確實(shí)高優(yōu)先級(jí)的&&讓步給次優(yōu)先級(jí)的=, 讓 $b = 200 先結(jié)合了.
究其原因, 是因?yàn)镻HP并不完全遵守優(yōu)先級(jí)的定義, 這個(gè)在PHP的手冊(cè)中也有說(shuō)明:
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.
這樣的設(shè)計(jì), 個(gè)人不發(fā)表看法, 反正在C語(yǔ)言中, 這樣類似的語(yǔ)句是判定為語(yǔ)法錯(cuò)的. PHP采用這樣的設(shè)計(jì), 很可能是歷史原因,
有好奇的同學(xué), 會(huì)想知道到底為什么, 之前jayeeliu網(wǎng)友也問(wèn)過(guò):
laruence你好:
問(wèn)一個(gè)php運(yùn)算符優(yōu)先級(jí)的問(wèn)題.$t == 1 && $tt = 2按照php運(yùn)算符優(yōu)先級(jí)應(yīng)該是(($t == 1) && $tt) = 2這個(gè)順序執(zhí)行,但實(shí)際上應(yīng)該是($t == 1) && ($tt = 2)我有些不太理解.
其實(shí)也簡(jiǎn)單, 運(yùn)算符優(yōu)先級(jí)是在存在二義性文法的時(shí)候的一種規(guī)約規(guī)則選擇的手段, 而PHP的語(yǔ)法分析文件定義中, 卻讓等號(hào)和T_BOOLEAN_AND(&&)之前不存在了規(guī)約沖突:
expr_without_variable: // 有隱規(guī)則存在, 相當(dāng)于T_BOOLEAN_AND成為了"一元操作符". | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); }
exp最后, 順便說(shuō)一下, PHP對(duì)應(yīng)于T_BOOLEAN_AND 還定義了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 這倆個(gè)的優(yōu)先級(jí)都低于等號(hào), 于是就會(huì)有了, 很多PHP入門教材示例代碼中經(jīng)典的:
$result = mysql_query(*) or die(mysql_error());
php 恒等運(yùn)算符(===)與比較運(yùn)算符(==)的區(qū)別
$a = 0;
$b = FALSE;
$a === FALSE 不成立,但 $b === FALSE成立,如果是==, $a == FALSE 和 $b == FALSE都成立
===運(yùn)算符還是很有用的,php有些內(nèi)置函數(shù)成功會(huì)返回某個(gè)值,失敗會(huì)返回false,假如成功了但返回的是”"或者0之類的空值你怎么判斷成功或者失敗呢?這是就可以用 === ,它可以區(qū)分變量類型.
參考:
比較運(yùn)算符 例子 名稱 結(jié)果
$a == $b 等于 TRUE,如果 $a 等于 $b.
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它們的類型也相同.(PHP 4 引進(jìn))
$a != $b 不等 TRUE,如果 $a 不等于 $b.
$a <> $b 不等 TRUE,如果 $a 不等于 $b.
$a !== $b 非全等 TRUE,如果 $a 不等于 $b,或者它們的類型不同.(PHP 4 引進(jìn))
$a < $b 小與 TRUE,如果 $a 嚴(yán)格小于 $b.
$a > $b 大于 TRUE,如果 $a 嚴(yán)格 $b.
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b.
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b.
如果比較一個(gè)整數(shù)和字符串,則字符串會(huì)被轉(zhuǎn)換為整數(shù).如果比較兩個(gè)數(shù)字字符串,則作為整數(shù)比較.此規(guī)則也適用于 switch語(yǔ)句.
說(shuō)了一堆了我們?cè)倏纯戳硪黄恼?運(yùn)算符號(hào)(php)操作符號(hào)
按運(yùn)算符號(hào)的功能分為
■算數(shù)運(yùn)算符 + – * / % ++ –
■字符串運(yùn)算符(連接運(yùn)算符) .
■賦值運(yùn)算符 = += -= *= %= .=
■比較(關(guān)系、條件)運(yùn)算符> < >= <== == === != <> !==
■邏輯運(yùn)算符 && and ||or ! not
■位運(yùn)算符 & | ~ ^ << >> >>>
■其他的預(yù)算符? : ” -> -> :: & $
■()改變優(yōu)先級(jí)別
%有兩個(gè)目的使用:整除運(yùn)算;控制范圍,不要用小數(shù),也不要用負(fù)數(shù),%會(huì)把兩邊的數(shù)轉(zhuǎn)為整數(shù)后在整除
控制范圍
$num=4600009;
echo $num%10;//9任何數(shù)和10 取余不會(huì)超過(guò)9
$a++(先用變量再自增1) ++$a(先自增1在用變量) $a-- --$a
比較后的結(jié)果只有一種 boolean true false
&按位與(兩個(gè)都為1才為1) |按位或(有一個(gè)為1就為1) ^異或(不同為1相同為0) ~取反(0與1互換) 左移 << , 右移>> 無(wú)符號(hào)>>右移
&和|既可以做為邏輯運(yùn)算符,又可以作為位運(yùn)算符&&||短路問(wèn)題:&& 和||會(huì)發(fā)生短路&&在做運(yùn)算時(shí),如果前邊的數(shù)為false,則后面是否為true,整個(gè)表達(dá)式都是false||在做運(yùn)算是,如果前面的數(shù)是true,則后邊是否為false,整個(gè)表達(dá)式都為true;
&或|運(yùn)算時(shí),兩邊都會(huì)被執(zhí)行.
其他運(yùn)算符
條件?成立執(zhí)行這里 :不成立則執(zhí)行這里
反引號(hào)執(zhí)行操作系統(tǒng)命令: