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

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

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

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

換句話說(shuō):遞增/遞減運(yùn)算中圈驼,不會(huì)把操作數(shù)轉(zhuǎn)換成整數(shù)后再運(yùn)算。如果運(yùn)算數(shù)是布爾值望几,則直接返回結(jié)果绩脆。

遞增/遞減布爾值:

$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

$a = NULL;
var_dump(++$a); // int(1) 
$a = NULL;
var_dump(--$a); // NULL

在處理字符變量的算數(shù)運(yùn)算時(shí),PHP 沿襲了 Perl 的習(xí)慣橄抹,而非 C 的靴迫。

例如,在 Perl 中

$a = 'Z';
$a++;

將把 $a 變成 'AA'楼誓,而在 C 中玉锌,

a = 'Z';
a++;

將把 a 變成 '[''Z' 的 ASCII 值是 90'[' 的 ASCII 值是 91)疟羹。

注意字符變量只能遞增主守,不能遞減,并且只支持純字母(a-z 和 A-Z)榄融。

例如:

$a="9D9"; 
var_dump(++$a);  // string(3) "9E0"

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

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

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

如果我們這么寫力九,大部人就知道是為什么了耍铜。

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

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

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

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

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

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

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

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

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

$a = '012';
$a++;
var_dump($a);

這個(gè)結(jié)果是 '013'帚呼?1311皱蹦?

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

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

如果是 0x 開頭的呢沈自?

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

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

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

var_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)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市勋功,隨后出現(xiàn)的幾起案子腥例,更是在濱河造成了極大的恐慌,老刑警劉巖酝润,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異璃弄,居然都是意外死亡要销,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門夏块,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疏咐,“玉大人纤掸,你說(shuō)我怎么就攤上這事』肴” “怎么了借跪?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)芜飘。 經(jīng)常有香客問(wèn)我抖棘,道長(zhǎng)睡榆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任果港,我火速辦了婚禮,結(jié)果婚禮上糊昙,老公的妹妹穿的比我還像新娘辛掠。我一直安慰自己,他們只是感情好释牺,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布萝衩。 她就那樣靜靜地躺著,像睡著了一般没咙。 火紅的嫁衣襯著肌膚如雪猩谊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天镜撩,我揣著相機(jī)與錄音预柒,去河邊找鬼。 笑死袁梗,一個(gè)胖子當(dāng)著我的面吹牛宜鸯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遮怜,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼淋袖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了锯梁?” 一聲冷哼從身側(cè)響起即碗,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陌凳,沒(méi)想到半個(gè)月后剥懒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡合敦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年初橘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡保檐,死狀恐怖耕蝉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夜只,我是刑警寧澤垒在,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站扔亥,受9級(jí)特大地震影響场躯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砸王,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一推盛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谦铃,春花似錦耘成、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嘹朗,卻和暖如春师妙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屹培。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工默穴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褪秀。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓蓄诽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親媒吗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仑氛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 一、php可以做什么 php是一種可以在服務(wù)器端運(yùn)行的編程語(yǔ)言闸英,可以運(yùn)行在Web服務(wù)器端锯岖。 php是一門后臺(tái)編程語(yǔ)...
    空谷悠閱讀 3,091評(píng)論 4 97
  • “雨傘哪去了出吹?”我正在冷風(fēng)中蹬著自行車,聽到點(diǎn)點(diǎn)這么一問(wèn)辙喂,馬上停下回頭看她——她雙手空空趋箩,不知何時(shí)把我交給她的傘丟...
    三月寶貝閱讀 524評(píng)論 1 1
  • 通過(guò)geth在測(cè)試鏈上部署合約 1.打開testrpc 2.重開一個(gè)終端連接到RPC服務(wù) geth attach ...
    zl_lz閱讀 2,227評(píng)論 0 0
  • YKCalender 仿照貓眼票房日歷開發(fā) 思路 采用Protocol去類型化赃额,runtime機(jī)制降低耦合度,使架...
    好個(gè)秋先生閱讀 704評(píng)論 0 2
  • 逐漸寸短的天和寸長(zhǎng)的暮色叫确。 逐漸漲潮的咸濕還有侵潮的黏稠溫暖。 春正在小心翼翼芍锦,拂去冬日的沉重竹勉。 有如,身旁那人束...
    橙與雪芋閱讀 174評(píng)論 0 0