摘要:在的官方手冊中寫道支持風(fēng)格的前后遞增與遞減運算符。第一個注意事遞增遞減運算符不影響布爾值。遞增遞減布爾值遞增遞減在處理字符變量的算數(shù)運算時,沿襲了的習(xí)慣,而非的。還有一個注意事項遞增遞減其他字符變量則無效,原字符串沒有變化。
在 PHP 的官方手冊中寫道:
PHP 支持 C 風(fēng)格的前/后遞增與遞減運算符。
第一個注意事:遞增/遞減運算符不影響布爾值。遞減 NULL 值也沒有效果,但是遞增 NULL 的結(jié)果是 1。
換句話說:遞增/遞減運算中,不會把操作數(shù)轉(zhuǎn)換成整數(shù)后再運算。如果運算數(shù)是布爾值,則直接返回結(jié)果。
遞增/遞減布爾值:
php$a = TRUE; var_dump(++$a); // bool(true) $a = TRUE; var_dump(--$a); // bool(true) $b = FALSE; var_dump(++$b); // bool(false) $b = FALSE; var_dump(--$b); // bool(false)
遞增/遞減 NULL:
php$a = NULL; var_dump(++$a); // int(1) $a = NULL; var_dump(--$a); // NULL
在處理字符變量的算數(shù)運算時,PHP 沿襲了 Perl 的習(xí)慣,而非 C 的。
例如,在 Perl 中
perl$a = "Z"; $a++;
將把 $a 變成 "AA",而在 C 中,
ca = "Z"; a++;
將把 a 變成 "["("Z" 的 ASCII 值是 90,"[" 的 ASCII 值是 91)。
注意字符變量只能遞增,不能遞減,并且只支持純字母(a-z 和 A-Z)。
例如:
php$a="9D9"; var_dump(++$a); // string(3) "9E0"
但是,這里又有一個陷阱了:
php$a="9E0"; echo ++$a; // 10
安裝上面的規(guī)則,應(yīng)該輸出 9E1,但是這里卻輸出了 10。WTF?
如果我們這么寫,大部人就知道是為什么了。
php$a = "9E0"; var_dump(++$a); // float(10)
$a 的類型是浮點型,也就是說,9E0 是浮點數(shù)的科學(xué)記數(shù)法,即 9 * 10^0 = 9,對 9 自增,結(jié)果當(dāng)然是 10 了。
參考:字符串轉(zhuǎn)換為數(shù)值
現(xiàn)在問題又來了:
php$l = "Z99"; $l++;
這個結(jié)果是多少呢?結(jié)果按照 perl 語言的規(guī)則,是 "AA00"。
還有一個注意事項:
遞增/遞減其他字符變量則無效,原字符串沒有變化。
這個就不解釋了。
最后一個注意事項:
php$a = "012"; $a++; var_dump($a);
這個結(jié)果是 "013"?13?11?
這段的結(jié)果是 int(13),字符串 "012" 并沒有被當(dāng)作八進(jìn)制。
php$a = 012; // 八進(jìn)制,十進(jìn)制為 10 $b = "012"; // 轉(zhuǎn)換為整數(shù)為十進(jìn)制 12
如果是 0x 開頭的呢?
php$a = "0x1A"; $a++; var_dump($a); // int(27)
WTF!居然不按套路出牌。0 開頭的不被認(rèn)為是八進(jìn)制,但是 0x 開頭的卻被認(rèn)為是十六進(jìn)制。
在 PHP 官方文檔中 Integer 整型 還有另一個八進(jìn)制陷阱:
phpvar_dump(01090); // 八進(jìn)制 010 = 十進(jìn)制 8
手冊中對此的解釋為:
Warning
如果向八進(jìn)制數(shù)傳遞了一個非法數(shù)字(即 8 或 9),則后面其余數(shù)字會被忽略。
綜上,PHP 不愧是世界上「最好」的語言。
沒有之一。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/20894.html
摘要:在中存在兩種類型基本類型和引用類型。值得注意的是,基本類型的值的狀態(tài)不會被共享。浮點類型和它們的值中的浮點類型遵循標(biāo)準(zhǔn)的定義。布爾類型和它們的值類型表示兩個邏輯量,和。 眾所周知,Java是一門靜態(tài)類型的語言,這意味著所有的變量和表達(dá)式的類型會在編譯時確定。同時,Java 還是一門強類型的語言,因此變量的值或表達(dá)式的結(jié)果的類型都會受到限制(比如一個聲明為 String 的變量不的值不可...
摘要:浮點數(shù)運算余數(shù)運算符還可以用于浮點數(shù)的運算。這些語言中的冪運算符有著比其他的單目運算符如一元或一元更高的優(yōu)先級。但是作為例外,在中,運算符被設(shè)計為比單目運算符優(yōu)先級更低。 一、算術(shù)運算符 運算符 描述 例子 x 運算結(jié)果 y 運算結(jié)果 + 加法 x=y+2 7 5 - 減法 x=y-2 3 5 * 乘法 x=y*2 10 5 / 除法 x=y/2 2.5 5 ...
摘要:從表中可以看到,比較運算符的優(yōu)先級為,而三元表達(dá)式條件運算符的優(yōu)化級為,因此可以確定比較運算符的優(yōu)先級要比三元表達(dá)式的要高,循環(huán)條件其實等價于第二種寫法。從上表中也可以看出前綴自增比比較運算符的優(yōu)化級要高。 我悟出權(quán)力本來就是不講理的——蟑螂就是海米;也悟出要造反,內(nèi)心必須強大到足以承受任何后果才行。——北島《城門開》 本文為讀 lodash 源碼的第十篇,后續(xù)文章會更新到這個倉庫中...
摘要:算數(shù)運算符算數(shù)運算符表示對數(shù)據(jù)值進(jìn)行計算加法運算符寫法加號類型的數(shù)據(jù)值,會正常進(jìn)行計算類型的數(shù)據(jù)值,會先將類型轉(zhuǎn)換成類型,然后在進(jìn)行計算類型的數(shù)據(jù)值,無法進(jìn)行計算,他會將其他類型都轉(zhuǎn)換成類型,在進(jìn)行字符串的拼接定義變量哦吼吼吼加法運算類 算數(shù)運算符 算數(shù)運算符 - 表示對數(shù)據(jù)值進(jìn)行計算 加法運算符 - 寫法:加號 + number類型的數(shù)據(jù)值,會正常進(jìn)行計算 boolean類型的...
摘要:運算符概述表達(dá)式由運算符和操作數(shù)組成運算符算術(shù)運算符賦值運算符關(guān)系運算符邏輯運算符條件運算符位運算符目運算符對幾個操作數(shù)進(jìn)行操作就是幾目運算符算術(shù)運算符與賦值運算符賦值運算符賦值運算符是從右往左運算,是單目運算符格式變量表達(dá)式復(fù)合賦值運算符 Lecture1 運算符概述 表達(dá)式:由運算符和操作數(shù)組成 運算符: 算術(shù)運算符 賦值運算符 關(guān)系運算符 邏輯運算符 條件運算符 位運算符 ...
閱讀 2423·2019-08-29 13:53
閱讀 2507·2019-08-29 11:32
閱讀 3047·2019-08-28 17:51
閱讀 3776·2019-08-26 10:45
閱讀 3492·2019-08-23 17:51
閱讀 2983·2019-08-23 16:56
閱讀 3336·2019-08-23 16:25
閱讀 3085·2019-08-23 14:15