2016-10-27 3 views
-1

Я хочу знать, почему следующее выражение оценивается как true.Почему следующее выражение оценивается как true?

var_dump(('a' == 0)); //bool(true) 
+2

Выполните 'эхо (INT) 'а'; ', и вы лучше поймете. – leninhasda

+2

, когда строки сравниваются с целыми числами, они автоматически записываются как целые числа, и если они не содержат числа, результат этого каста равен 0. и '0 == 0' - поэтому вы никогда не сравниваете строку с integer - и если вам нужно, вы используете строгое сравнение: '' a '=== 0' является ложным. –

ответ

6

String conversion to numbers (от PHP инструкции, курсив мой)

Когда строка оценивается в числовом контексте, полученное значение и тип определяются следующим образом.

Если строка не содержит какой-либо из символов «», „е“, или „E“ и числовое значение вписывается в пределах целого типа (как определено PHP_INT_MAX), строка будет оцениваться как целое число. Во всех других случаях он будет оцениваться как поплавок.

Значение задается начальной частью строки. Если строка начинается с действительных числовых данных, это будет используемое значение. В противном случае значение будет равно 0 (ноль). Допустимые числовые данные - это необязательный знак , за которым следует одна или несколько цифр (необязательно содержащая десятичную точку ), за которой следует необязательный показатель степени. Показателем является 'e' или 'E', за которым следует одна или несколько цифр.

Примеры:

var_dump(('a' == 0)); //bool(true) 
var_dump(('a' === 0)); //bool(false) 
var_dump(('aaaa' == 0)); //bool(true) 
var_dump(('1aaaa' == 1)); //bool(true) 
var_dump(('18aaaaa' == 18)); //bool(true) 
1

вы можете ожидать, это

<?php 
var_dump('a' === 0); 

https://eval.in/667364

+0

Нет, я знаю разницу между «==» и «===». Спасибо, в любом случае! – Dumitru

Смежные вопросы