Вопрос для интервью: В php 123==0123?


Я ответил, что это ложь. затем он спросил, почему? я не мог ответить. Кто-нибудь может дать ответ? Мне очень интересно это узнать.

Author: meagar, 2009-09-11

5 answers

Префикс числа с 0 указывает на восьмеричное число (основание 8), почти так же, как 0x указывает на шестнадцатеричное (основание 16).

 23
Author: fbrereto, 2009-09-11 21:10:32

Этот код:

var_dump(123);
var_dump(0123);

Получите вы:

int 123
int 83

Это потому, что 0123 является восьмеричной нотацией (из-за 0 в начале) , в то время как 123 является десятичной.


Для получения дополнительной информации вы можете ознакомиться с разделом Целое число руководства.


Еще более сложным вопросом было бы задать вопрос о 79 и 079, например:

var_dump(79);
var_dump(079);

Получите вы:

int 79
int 7

(9 не является действительным цифра в восьмеричном числе ;-) )

 66
Author: Pascal MARTIN, 2015-07-03 10:51:19

1) Когда мы используем оператор == в php, он проверяет, равны ли значения. Итак, 5=="5"=> верно 2) Когда мы используем оператор === в php, он проверяет, равны ли значения и типы данных. Итак, 5==="5"=> ложь

123==0123 => ложный ТАКЖЕ 123===0123=> ложь

123 - десятичное число: 123 0123 - восьмеричное число (так как оно начинается с 0): 83

123 не равно 83

 5
Author: Krishna Kant Sharma, 2009-09-11 19:05:59

Потому что 0123 означает "123 в восьмеричном (основание 8)", что равно 83 в десятичном.

 2
Author: Cat Plus Plus, 2009-09-11 19:01:21

0123 - это обозначение восьмеричного числа (83 десятичных, с моей точки зрения), в то время как 123 - десятичное число. Следовательно, они не равны.

 2
Author: Rowland Shaw, 2009-09-11 19:02:54