成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

PHP 中「自增、自減」運(yùn)算引發(fā)的奇怪問(wèn)題

madthumb / 2204人閱讀

摘要:在的官方手冊(cè)中寫(xiě)道支持風(fēng)格的前后遞增與遞減運(yùn)算符。第一個(gè)注意事遞增遞減運(yùn)算符不影響布爾值。遞增遞減布爾值遞增遞減在處理字符變量的算數(shù)運(yùn)算時(shí),沿襲了的習(xí)慣,而非的。還有一個(gè)注意事項(xiàng)遞增遞減其他字符變量則無(wú)效,原字符串沒(méi)有變化。

在 PHP 的官方手冊(cè)中寫(xiě)道:

  

PHP 支持 C 風(fēng)格的前/后遞增與遞減運(yùn)算符。

第一個(gè)注意事:遞增/遞減運(yùn)算符不影響布爾值。遞減 NULL 值也沒(méi)有效果,但是遞增 NULL 的結(jié)果是 1。

換句話(huà)說(shuō):遞增/遞減運(yùn)算中,不會(huì)把操作數(shù)轉(zhuǎn)換成整數(shù)后再運(yùn)算。如果運(yùn)算數(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ù)運(yùn)算時(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"

但是,這里又有一個(gè)陷阱了:

php$a="9E0"; 
echo ++$a;  // 10

安裝上面的規(guī)則,應(yīng)該輸出 9E1,但是這里卻輸出了 10。WTF?

如果我們這么寫(xiě),大部人就知道是為什么了。

php$a = "9E0"; 
var_dump(++$a);  // float(10)

$a 的類(lèi)型是浮點(diǎn)型,也就是說(shuō),9E0 是浮點(diǎn)數(shù)的科學(xué)記數(shù)法,即 9 * 10^0 = 9,對(duì) 9 自增,結(jié)果當(dāng)然是 10 了。

參考:字符串轉(zhuǎn)換為數(shù)值

現(xiàn)在問(wèn)題又來(lái)了:

php$l = "Z99";
$l++; 

這個(gè)結(jié)果是多少呢?結(jié)果按照 perl 語(yǔ)言的規(guī)則,是 "AA00"。

還有一個(gè)注意事項(xiàng):

遞增/遞減其他字符變量則無(wú)效,原字符串沒(méi)有變化。

這個(gè)就不解釋了。

最后一個(gè)注意事項(xiàng):

php$a = "012";
$a++;
var_dump($a);

這個(gè)結(jié)果是 "013"13?11?

這段的結(jié)果是 int(13),字符串 "012" 并沒(méi)有被當(dāng)作八進(jìn)制。

php$a = 012;   // 八進(jìn)制,十進(jìn)制為 10
$b = "012"; // 轉(zhuǎn)換為整數(shù)為十進(jìn)制 12

如果是 0x 開(kāi)頭的呢?

php$a = "0x1A";
$a++;
var_dump($a);   // int(27)

WTF!居然不按套路出牌。0 開(kāi)頭的不被認(rèn)為是八進(jìn)制,但是 0x 開(kāi)頭的卻被認(rèn)為是十六進(jìn)制。

在 PHP 官方文檔中 Integer 整型 還有另一個(gè)八進(jìn)制陷阱:

phpvar_dump(01090); // 八進(jìn)制 010 = 十進(jìn)制 8

手冊(cè)中對(duì)此的解釋為:

  

Warning
如果向八進(jìn)制數(shù)傳遞了一個(gè)非法數(shù)字(即 8 或 9),則后面其余數(shù)字會(huì)被忽略。

綜上,PHP 不愧是世界上「最好」的語(yǔ)言。

沒(méi)有之一。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/20894.html

相關(guān)文章

  • Java 類(lèi)型、值和變量 之 基本類(lèi)型

    摘要:在中存在兩種類(lèi)型基本類(lèi)型和引用類(lèi)型。值得注意的是,基本類(lèi)型的值的狀態(tài)不會(huì)被共享。浮點(diǎn)類(lèi)型和它們的值中的浮點(diǎn)類(lèi)型遵循標(biāo)準(zhǔn)的定義。布爾類(lèi)型和它們的值類(lèi)型表示兩個(gè)邏輯量,和。 眾所周知,Java是一門(mén)靜態(tài)類(lèi)型的語(yǔ)言,這意味著所有的變量和表達(dá)式的類(lèi)型會(huì)在編譯時(shí)確定。同時(shí),Java 還是一門(mén)強(qiáng)類(lèi)型的語(yǔ)言,因此變量的值或表達(dá)式的結(jié)果的類(lèi)型都會(huì)受到限制(比如一個(gè)聲明為 String 的變量不的值不可...

    beita 評(píng)論0 收藏0
  • JavaScript-算數(shù)運(yùn)算

    摘要:浮點(diǎn)數(shù)運(yùn)算余數(shù)運(yùn)算符還可以用于浮點(diǎn)數(shù)的運(yùn)算。這些語(yǔ)言中的冪運(yùn)算符有著比其他的單目運(yùn)算符如一元或一元更高的優(yōu)先級(jí)。但是作為例外,在中,運(yùn)算符被設(shè)計(jì)為比單目運(yùn)算符優(yōu)先級(jí)更低。 一、算術(shù)運(yùn)算符 運(yùn)算符 描述 例子 x 運(yùn)算結(jié)果 y 運(yùn)算結(jié)果 + 加法 x=y+2 7 5 - 減法 x=y-2 3 5 * 乘法 x=y*2 10 5 / 除法 x=y/2 2.5 5 ...

    lindroid 評(píng)論0 收藏0
  • lodash源碼分析之baseFindIndex運(yùn)算符優(yōu)先級(jí)

    摘要:從表中可以看到,比較運(yùn)算符的優(yōu)先級(jí)為,而三元表達(dá)式條件運(yùn)算符的優(yōu)化級(jí)為,因此可以確定比較運(yùn)算符的優(yōu)先級(jí)要比三元表達(dá)式的要高,循環(huán)條件其實(shí)等價(jià)于第二種寫(xiě)法。從上表中也可以看出前綴自增比比較運(yùn)算符的優(yōu)化級(jí)要高。 我悟出權(quán)力本來(lái)就是不講理的——蟑螂就是海米;也悟出要造反,內(nèi)心必須強(qiáng)大到足以承受任何后果才行?!睄u《城門(mén)開(kāi)》 本文為讀 lodash 源碼的第十篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中...

    Meathill 評(píng)論0 收藏0
  • JavaScript 之 核心語(yǔ)法 [ 運(yùn)算符 ]

    摘要:算數(shù)運(yùn)算符算數(shù)運(yùn)算符表示對(duì)數(shù)據(jù)值進(jìn)行計(jì)算加法運(yùn)算符寫(xiě)法加號(hào)類(lèi)型的數(shù)據(jù)值,會(huì)正常進(jìn)行計(jì)算類(lèi)型的數(shù)據(jù)值,會(huì)先將類(lèi)型轉(zhuǎn)換成類(lèi)型,然后在進(jìn)行計(jì)算類(lèi)型的數(shù)據(jù)值,無(wú)法進(jìn)行計(jì)算,他會(huì)將其他類(lèi)型都轉(zhuǎn)換成類(lèi)型,在進(jìn)行字符串的拼接定義變量哦吼吼吼加法運(yùn)算類(lèi) 算數(shù)運(yùn)算符 算數(shù)運(yùn)算符 - 表示對(duì)數(shù)據(jù)值進(jìn)行計(jì)算 加法運(yùn)算符 - 寫(xiě)法:加號(hào) + number類(lèi)型的數(shù)據(jù)值,會(huì)正常進(jìn)行計(jì)算 boolean類(lèi)型的...

    zhongmeizhi 評(píng)論0 收藏0
  • Chapter3 Java運(yùn)算

    摘要:運(yùn)算符概述表達(dá)式由運(yùn)算符和操作數(shù)組成運(yùn)算符算術(shù)運(yùn)算符賦值運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符條件運(yùn)算符位運(yùn)算符目運(yùn)算符對(duì)幾個(gè)操作數(shù)進(jìn)行操作就是幾目運(yùn)算符算術(shù)運(yùn)算符與賦值運(yùn)算符賦值運(yùn)算符賦值運(yùn)算符是從右往左運(yùn)算,是單目運(yùn)算符格式變量表達(dá)式復(fù)合賦值運(yùn)算符 Lecture1 運(yùn)算符概述 表達(dá)式:由運(yùn)算符和操作數(shù)組成 運(yùn)算符: 算術(shù)運(yùn)算符 賦值運(yùn)算符 關(guān)系運(yùn)算符 邏輯運(yùn)算符 條件運(yùn)算符 位運(yùn)算符 ...

    NicolasHe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<