- PHP網(wǎng)絡(luò)編程學(xué)習(xí)筆記
- 宗杰等編著
- 2785字
- 2019-01-01 14:11:30
3.4 表達(dá)式和操作符
表達(dá)式是PHP語言最重要的概念。任何有值的式子那是一個PHP表達(dá)式。
最基本的表達(dá)式形式是常量和變量。用操作符連接常量和變量構(gòu)成的式子是表達(dá)式的常見形式。
例如:
defi ne("PI",3.14); $a=1000; $b=$a; $c=PI; $d=($a+$b);
稍復(fù)雜的表達(dá)式是函數(shù)以及包含函數(shù)的運算式。
例如:
function five() { return 5; } $e=five(); //變量$e的值等于函數(shù)five()的返回值5 $f=$e+fi ve();//變量$f的值等于10

書寫表達(dá)式時,需要注意以下幾點:
1 按照人們的一般運算邏輯和思維方式書寫。
2 以易于理解為第一追求,有利效率為第二追求。
3 必要時加上注釋。
操作符也叫運算符,是具有特定運算意義的標(biāo)準(zhǔn)運算符號,利用它可以就給出的一或多個表達(dá)式來產(chǎn)生另一個新值。比如,“+”代表數(shù)學(xué)意義上的求和運算,“*”代表數(shù)學(xué)意義上的求積運算,等等。
PHP語言有三種類型的運算符:第一類是一元運算符,只對一個操作數(shù)運算,例如!(取反運算符,邏輯非)或++(加1運算符)。第二類是有限二元運算符,PHP中的大多數(shù)運算符屬于此類。第三類是三元運算符。只有?:一個。它實際上相當(dāng)于一個兩分支判斷程序,使用時應(yīng)該把整個三元表達(dá)式放到括號()里,以利于理解其返回值。
當(dāng)表達(dá)式中有多個運算符時,就涉及優(yōu)先級問題。比如:表達(dá)式2+2*2的值是6,而不是8。是因為運算符*的優(yōu)先級高于運算符+,所以2+2*2相當(dāng)于2+4,而不是4*2。
如果運算符優(yōu)先級相同,則按照從左到右的順序依次運算。
在PHP中有很多運算符,當(dāng)構(gòu)成表達(dá)式的運算符比較多,我們不易理清其運算順序時,建議使用括號()來強制運算的優(yōu)先順序,而不必刻意追求表達(dá)式的書寫格式,這樣可以增強代碼的可讀性。
除了運算符的優(yōu)先級之外,還有運算符的結(jié)合方向需要考慮,主要是二元運算符。它們分為左結(jié)合運算符和右結(jié)合運算符。通俗地講,就是從運算符左邊的表達(dá)式向右邊的表達(dá)式結(jié)合進行運算就屬
$a=500/100; //運算符"/"左邊的500為被除數(shù),右邊的100為除數(shù),$a的值為5 $a+=100; //運算符"+="右邊的100向左運算,加到$a上,故結(jié)果是$a=105
PHP語言中操作符的結(jié)合性和運算優(yōu)先級如表3-4所示。
表3-4 操作符的優(yōu)先級和結(jié)合性

PHP語言的操作符可以分為算術(shù)運算符、賦值運算符、位運算符、比較運算符、遞增遞減運算符、邏輯運算符、字符串運算符、數(shù)組運算符、類型運算符、錯誤控制運算符和執(zhí)行運算符。
3.4.1 算術(shù)運算符
包括+、-、*、/、%共5個,分別對應(yīng)算術(shù)中的加、減、乘、除、取模運算。主要注意的是除號/返回結(jié)果總是浮點數(shù),即使兩個運算數(shù)是整數(shù)也是這樣。取模運算較為復(fù)雜,當(dāng)兩個操作數(shù)都是正數(shù)時結(jié)果為正,如果有一個操作數(shù)為負(fù),那么余數(shù)的符號則取決于機器,比如21%-5,結(jié)果可能為-1或1。如果有兩個操作數(shù)都是負(fù)數(shù),應(yīng)該是得出結(jié)果為負(fù)數(shù)。
3.4.2 賦值運算符
基本的賦值運算符是=。它的含義并不是“等于”。它意味著把右邊表達(dá)式的值賦給左邊的運算數(shù)或變量。
例如:
$a=100+100; //含義是把=號右邊的表達(dá)式100+100的值(等于200)賦值給變量$a
賦值運算表達(dá)式的值也就是所被賦的值。也就是說,賦值表達(dá)式$a=100的值是100。
例如:
$a=($b=100)+100; //結(jié)果是變量$b的值為100,變量$a的值為200
賦值運算是將=號右邊的值復(fù)制到=左邊的新變量中,屬于傳值賦值。
3.4.3 位運算符
包括&、|、^、~、<<、>>共6個。分別對應(yīng)與、或、異或、非、左移、右移運算。
位運算符是對整型數(shù)中指定的位進行置位。如果左右參數(shù)都是字符串,則位運算符將操作字符的ASCII值。
位運算符實際上是對操作數(shù)換算成二進制表示形式,對其二進制位進行的操作。
位運算符的運算意義如表3-5所示。
表3-5 位運算符的運算意義

例如:
echo 12^9; //顯示輸出的結(jié)果為5
十進制數(shù)12的二進制表示是1100,9的二進制表示是1001,根據(jù)異或運算的“相同為0,不同為1”規(guī)則,結(jié)果為0101,即十進制數(shù)5。
需要注意的是,在32位系統(tǒng)上不要右移超過32位,也不要在結(jié)果可能超過32位的情況下左移。以上兩種情況會使位“溢出”,運算結(jié)果出錯。
3.4.4 比較運算符
顧名思義,比較運算符是對兩個值進行比較而得到返回值。包括==、===、!=、<>、!==、<、>、<=、>=、?:共10個運算符。
比較運算符的運算意義如表3-6所示。
表3-6 比較運算符的運算意義

三元條件運算符?:稍微特殊,它的基本使用格式是(expr1) ? (expr2) : (expr3),在expr1求值為TRUE時,三元條件運算符?:構(gòu)成的整個表達(dá)式的值為expr2,在expr1求值為FALSE時整個表達(dá)式的值為expr3。
例如: $a=1?2:3; //此時$a的值為2 $b=0?2:3; //此時$b的值為3 $c=($a>$b)?2:3; //此時$c的值為3,因為expr1(即$a>$b)求值為FALSE。 $d=($a<$b)?2:3; //此時$d的值為2,因為expr1(即$a<$b)求值為TRUE。
如果比較一個整數(shù)和字符串,則字符串會被轉(zhuǎn)換為整數(shù)。如果比較兩個數(shù)字字符串,則作為整數(shù)比較。
對于多種的數(shù)據(jù)類型,比較運算符根據(jù)表3-7進行比較。
表3-7 比較多種類型

3.4.5遞增遞減運算符
PHP語言支持C語言風(fēng)格的前、后遞增與遞減運算符。遞增遞減運算符的運算意義如表3-8所示。
表3-8 遞增遞減運算符的運算意義

例如: $a=1; $b=$a++; //$b的值為1,$a的值為2 $b=++$a; //$a的值為3,$b的值為3
注意:
遞增遞減運算符不影響布爾類型變量的值。遞減NULL值也沒有效果,但是遞增NULL的結(jié)果是1。

在處理字符變量的算術(shù)運算時,PHP沿襲了Perl的習(xí)慣,而非C的。例如,在Perl中 'Z'+1將得到'AA',而在C中,'Z'+1將得到'['(ord('Z') == 90,ord('[') == 91)。注意字符變量只能遞增,不能遞減。
例如:
$i = 'W'; for ($n=0; $n<6; $n++) { echo ++$i . "\n"; }

將輸出: X Y Z AA AB AC

3.4.6 邏輯運算符
包括and、or、xor、!、&&、||共6個,分別對應(yīng)與、或、異或、非、與、或邏輯運算。“與”和“或”有兩種不同形式運算符,它們運算的優(yōu)先級不同,見表3-3。
邏輯運算符的運算意義如表3-9所示。
表3-9 邏輯運算符的運算意義

3.4.7 字符串運算符
包括.、.=共兩個。第一個.稱為連接運算符,第二個.=稱為連接賦值運算符。其作用都是將兩個字符串連接成一個字符串。
例如:
$a="Hello "; $b=$a."World!"; //字符串變量$b的內(nèi)容為"Hello World!" $a="Hello "; $a.="World!"; //字符串變量$a的內(nèi)容為"Hello World!"

3.4.8 數(shù)組運算符
包括+、==、===、!=、<>、!==共6個,數(shù)組運算符的運算意義如表3-10所示。
表3-10 數(shù)組運算符的運算意義

+運算符執(zhí)行兩個數(shù)組的聯(lián)合運算,就是把右邊的數(shù)組附加到左邊的數(shù)組后面,但是重復(fù)的鍵值不會被覆蓋。
例如:
$a=array("a"=>"Tom", "b"=>"Jerry"); $b=array("a"=>"Mary", "b"=>"Yao", "c"=>"apple"); $c=$a+$b; // $a和$b的聯(lián)合 echo "Union of \$a and \$b: \n"; ar_dump($c); //此函數(shù)通過縮進顯示數(shù)組的結(jié)構(gòu)信息, 如果是多維數(shù)組將遞歸展開類型與值。 $c=$b+$a; // $b和$a的聯(lián)合 echo "Union of \$b and \$a: \n"; var_dump($c);
上述代碼將顯示:
Union of $a and $b: array(3) { ["a"]=> string(3) "Tom" ["b"]=> string(5) "Jerry" ["c"]=> string(5) "apple" } Union of $b and $a: array(3) { ["a"]=> string(4) "Mary" ["b"]=> string(3) "Yao" ["c"]=> string(5) "apple" }

3.4.9 類型運算符
類型運算符:instanceof。instanceof用來測定一個給定的對象是否來自指定的對象類。instanceof運算符是PHP5引進的。
例如:
class A { } class B { } //定義了兩個類A、B $thing=new A; //聲明類A的一個對象$thing if ($thing instanceof A) { echo 'A'; } if ($thing instanceof B) { echo 'B'; } 輸出: A

3.4.10 錯誤控制運算符
錯誤控制運算符只有1個:@。當(dāng)將其放置在一個PHP表達(dá)式之前,該表達(dá)式可能產(chǎn)生的任何錯誤信息都被忽略掉。
例如:
$c=@mysql_connect(); //此處參數(shù)省略,將使用默認(rèn)參數(shù)
上面的語句是使用函數(shù)mysql_connect()建立了一個MySQL數(shù)據(jù)庫連接,但是連接失敗將不會提示任何出錯信息。
3.4.11 執(zhí)行運算符
``,反引號,數(shù)字鍵1左邊鍵的字符。反引號中的內(nèi)容將作為操作系統(tǒng)命令來執(zhí)行,并將其輸出信息賦值給一個變量。
例如:
$out_OS=`ipconfig /all`; echo $out_OS;
輸出結(jié)果為本機網(wǎng)絡(luò)連接的詳細(xì)配置信息。
- 深入核心的敏捷開發(fā):ThoughtWorks五大關(guān)鍵實踐
- Software Testing using Visual Studio 2012
- Python GUI Programming Cookbook
- iOS編程基礎(chǔ):Swift、Xcode和Cocoa入門指南
- Hands-On Automation Testing with Java for Beginners
- OpenStack Orchestration
- Swift語言實戰(zhàn)精講
- Python High Performance Programming
- 微服務(wù)架構(gòu)深度解析:原理、實踐與進階
- SSM開發(fā)實戰(zhàn)教程(Spring+Spring MVC+MyBatis)
- uni-app跨平臺開發(fā)與應(yīng)用從入門到實踐
- C++程序設(shè)計教程
- Drupal 8 Development:Beginner's Guide(Second Edition)
- Kohana 3.0 Beginner's Guide
- 前端架構(gòu)設(shè)計