Вопрос для интервью: В php 123==0123?
Я ответил, что это ложь. затем он спросил, почему? я не мог ответить. Кто-нибудь может дать ответ? Мне очень интересно это узнать.
5 answers
Префикс числа с 0
указывает на восьмеричное число (основание 8), почти так же, как 0x
указывает на шестнадцатеричное (основание 16).
Этот код:
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
не является действительным цифра в восьмеричном числе ;-) )
1) Когда мы используем оператор == в php, он проверяет, равны ли значения. Итак, 5=="5"=> верно 2) Когда мы используем оператор === в php, он проверяет, равны ли значения и типы данных. Итак, 5==="5"=> ложь
123==0123 => ложный ТАКЖЕ 123===0123=> ложь
123 - десятичное число: 123 0123 - восьмеричное число (так как оно начинается с 0): 83
123 не равно 83
Потому что 0123 означает "123 в восьмеричном (основание 8)", что равно 83 в десятичном.
0123 - это обозначение восьмеричного числа (83 десятичных, с моей точки зрения), в то время как 123 - десятичное число. Следовательно, они не равны.