2017-08-17 52 views
5

讓我們假設我有輸出$i作爲Leading Zero如何在PHP中工作?

$i = 016; 
echo $i/2; 
//ans will be 7 

我知道,前面的零表明PHP的八進制數的代碼,但它是如何解釋的,怎麼能執行?有人可以一步一步地分享它的執行嗎?解析器在這裏的作用是什麼?我研究了很多並閱讀了以前的所有答案,但沒有一個有任何深入的解釋。

+2

看看http://php.net /manual/en/language.types.integer.php –

+2

解釋器轉換dur編輯階段。第一行代碼產生與'$ i = 14;'相同的操作碼。 – axiac

+0

你是什麼意思「深層解釋」?解析器看到一個帶有前導0的整數並將其解釋爲八進制數,那就是它!? :D – xander

回答

2

當您在PHP中使用零前面的整數時,在這種情況下,029

它變成了八進制。

所以,當你回聲的時候,它會轉換成它的小數形式。

哪些結果:

echo 016; //14 (decimal) valid octal 

echo 029; // 2 (decimal) - Invalid octal 

實際上,它在manual

有效的八進制這裏所說:

octal  : 0[0-7]+ 

注:如果一個無效的數字在此之前PHP 7,以八進制整數(即8或9)給出,其餘數字被忽略。從PHP 7開始,會發出解析錯誤。

+0

是的,你的答案似乎完美的解釋只是我想編輯的東西是029到2,因爲它不是給完美的十進制數而是使用016到14,這樣任何人都可以輕鬆解讀。謝謝噸:) –

+1

@JayminNoob:029是一個無效的八進制文字,那麼它應該怎麼做呢? –

+0

@ IgnacioVazquez-Abrams我已經提到了同樣的東西,如果它是無效的八進制文字接下來呢? –

2

八進制數字系統,或十月的簡稱,是基-8號系統,並使用該數字0至7

八路標記可以從二進制數通過分組連續二進制數字進行分組爲三個(從右側開始)。

例如,對於小數74的二進制表示是1001010.兩個零可以在左側被添加:(00)1 001 010,相應的八進制數字1 1 2,得到的八進制表示112

在你的問題$i = 016;被解釋計算併產生$i = 14;(這是equilevant十進制數)

然後你只需除以2,其輸出7.

+0

如果它是無效的八進制文字它接下來會怎麼樣呢? –