1.運(yùn)算符的優(yōu)先級(jí)
為延津等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及延津網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、成都做網(wǎng)站、延津網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
請(qǐng)參照這個(gè)表
http://www.php.net/manual/zh/language.operators.precedence.php
例1:
$a = $b+=3; 事實(shí)發(fā)生的順序?yàn)?/p>
$a = ($b+=3);
++$a + $a++; 事實(shí)發(fā)生的順序?yàn)?/p>
(++$a) + ($a++); 前一個(gè)++$a將會(huì)影響到后面的$a++中的$a的值。
最好使用括號(hào),讓人易懂。
例2. !$a = foo()
!的優(yōu)先級(jí)比=高 ,但兩者結(jié)合的順序都是從右往左 所以這個(gè)表達(dá)式的執(zhí)行順序?yàn)?($a=foo())
誰(shuí)會(huì)扯蛋這么寫? 除了讓人看著頭暈以外,沒(méi)有其他任何作用了。
2.算術(shù)運(yùn)算符
注意:除法幾乎總是返回浮點(diǎn)數(shù)(除非兩個(gè)數(shù)都為整數(shù)且能整除才返回INT)
注意:取模(或稱取余)時(shí),浮點(diǎn)數(shù)會(huì)被忽略小數(shù),轉(zhuǎn)為整數(shù)計(jì)算。 如:5.5%3=2
注意:取模(或稱取余)時(shí),余數(shù)的符號(hào)與前者相同
-5%3 = –2,5%-3=2
3.賦值運(yùn)算符
基本的賦值運(yùn)算符就是=
注意:PHP5中$x = object 默認(rèn)是引用object,修改$x 會(huì)同時(shí)修改object里的內(nèi)容,所以如果需要完全COPY的話 用clone
直接引用賦值 $a = &$b;
注意:new返回的是一個(gè)引用 所以$a = &new x;會(huì)報(bào)錯(cuò)。
但 new 引用賦值給$a后 $b = &$a;是不會(huì)報(bào)錯(cuò)的,因?yàn)檫@時(shí)$a是new x引用表示的字符串,而非new x。
4.位運(yùn)算符
& 與 00得0,10得0,11得1。(同時(shí)為1才為1,否則都為0)
| 或 00得0,10得1,11得1。(同時(shí)為0才為0,否則都為1)
^ 異或 00得0,10得1,11得0。(兩邊相等則為0,否則都為1)
~ 取反 (就是轉(zhuǎn)換為二進(jìn)制后,全部反轉(zhuǎn),0變1,1變0)
<< 左移 將對(duì)象二進(jìn)制后左移X位,左邊丟,右邊補(bǔ)0
>> 右移 將對(duì)象二進(jìn)制后右移X位,左邊補(bǔ)(正數(shù)補(bǔ)0,負(fù)數(shù)補(bǔ)1),右邊丟
(C++里還有>>>叫無(wú)符號(hào)右移,即左邊無(wú)論正負(fù)都補(bǔ)0,右邊丟)
注意:由于==的優(yōu)先級(jí)比&高,所以$a&$b==true 的事實(shí)發(fā)生順序?yàn)?a&($b==true),所以如果要讓前面先運(yùn)算則需加上括號(hào)($a&$b) == true;
注意:不要在32位系統(tǒng)下右移超過(guò)32位,也不要在結(jié)果可能超過(guò)32位的情況下左移,可用GMP移動(dòng)。
例:一個(gè)蛋疼的判斷奇偶的辦法
/**
* 判斷一個(gè)數(shù)是奇數(shù)還是偶數(shù)
* 思路為:
* 奇數(shù)的話,他右移一位得到的結(jié)果永遠(yuǎn)是1
* 而偶數(shù)右移一位得到的結(jié)果永遠(yuǎn)是0
* */
$a = 7; //101
$b = $a>>1; //10
$c = $b<<1; //100
echo $c^$a; //100 ^ 101 得到001 判斷出來(lái)了 ^ 相同的為0,不同才為1
?>
如何將位移出來(lái)的位保存下來(lái),可以用&上移出來(lái)的位,需要用到的函數(shù)為base_convert
5.比較運(yùn)算符
注意:switch是==比較
注意:浮點(diǎn)由于實(shí)際值的不準(zhǔn)確,所以不應(yīng)相比較。(可是沒(méi)辦法?。?/p>
三元運(yùn)算在5.3后可以這么寫 expr1?:expr3; expr1為真返回expr1否則返回expr3
6.錯(cuò)誤運(yùn)算符
符號(hào)為@,最好和 or die結(jié)合使用。
如果激活了ini的track_errors 則錯(cuò)誤會(huì)被存放在$php_errormsg中。
set_error_handler可以自定義錯(cuò)誤處理函數(shù)(不深究了)
7.執(zhí)行運(yùn)算符
符號(hào)為反引號(hào)``,功能與shell_exec相同
這個(gè)挺好的,比如linux的ls win的dir 直接顯示目錄里的文件
8.遞增遞減運(yùn)算符
這個(gè)沒(méi)啥說(shuō)的 注意符號(hào)在變量前后的區(qū)別
9.邏輯運(yùn)算符
and 和&&差不多 但注意優(yōu)先級(jí)
or 和||差不多
xor a和b任何一個(gè)為真就為真,但兩者同時(shí)為真或假都為假
! 反著來(lái)
&& 并且
|| 或者
10.字符串運(yùn)算符
. 連接符 .= 合并
11.數(shù)組運(yùn)算
+ 合并兩個(gè)數(shù)組(如果有相同的鍵名,左邊覆蓋右邊)
== 判斷兩個(gè)數(shù)組鍵和值是否相等,順序可以不一樣
=== 全等就不說(shuō)了
!= 和==相反
<> 和!=差不多
!== 不全等(和===相反)
12.類型運(yùn)算符
instanceof 判斷變量是否是一個(gè)對(duì)象的實(shí)例(引不引用都一樣)
$a=new myclass;
echo $a instanceof myclass;(也支持字符串判斷 $a instanceof “myclass”)
還可以判斷是否是接口的實(shí)例
instanceof和 is_a功能一模一樣。
擴(kuò)展:is_subclass_of(obj,classname) 判斷對(duì)象是否是該類的子類
注意:僅能判斷是否屬于對(duì)象的一個(gè)實(shí)例,而不能判斷兩個(gè)對(duì)象是否相同。(相同的實(shí)例判斷應(yīng)用==或=== 或者轉(zhuǎn)換成array再==)