сравнение в PHP

Dec 19, 2013 02:58

Доброе время суток, уважаемые!
Я чего-то не понимаю, нуждаюсь в вашей помощи:

Как так получается??

var_dump($fileid, (int) $fileid, $fileid == (int) $fileid);

string(11) "VXa9tXcMhXQ" int(0) bool(true).

пояснения:
$fileid = "VXa9tXcMhXQ"

(int) $fileid = 0. ок.

("VXa9tXcMhXQ" == 0) = true. Как??

Leave a comment

Comments 1

deka December 18 2013, 23:08:52 UTC
Типы данных, вестимо. И преобразования. В сравнении левая часть "приводится" к int с очевидным результатом 0, соответсвтенно 0 == 0. Ы?

PS. Это в том смысле, что если указать явное преобразование типа, то содержимое строки "VXa9tXcMhXQ" явно не int, и что-то типа С-шной atoi() (если она в этом случае применяется -- а скорее всего она, надо в доке почитать) на такую строку вернёт (int)0.

Соответственно, если ты указал в операции сравнения справа от оператора явное преобразование типа, то слева наложится то же преобразование типа (иначе конфликт типов и эцих с гвоздями), и вместо "$fileid == (int) $fileid" ты в реале получишь "(int) $fileid == (int) $fileid", с очевидным true в результате, вне зависимости от содержимого $fileid.

Возможно, такое поведение регулируется настройками, это я не помню ;)

Reply


Leave a comment

Up