August 19th, 2013

добрый

(no subject)

На Хабре пишут, что вот такое вот поведение:
# php -r "var_dump(7 == '7_and_more');";
bool(true)

это правильно и хорошо.

Я согласен, что это логично с точки зрения PHP, ибо алгоритм его работы такой же, как в случае
# php -r "var_dump(7 == '7');";
bool(true)


Но позвольте, если я готов согласиться, что 7 и "7" равны, то, по-моему, никто из нормальных людей не согласится, что 7 и "7_and_more" равны. То есть семантика операции нарушена, и если ты не знаешь, что оператор нестрогого сравнения (который выглядит точно так же, как оператор обычного сравнения в куче языков) по сути является syntax sugar для довольно мощной конструкции с анализом типов операндов и последующим их приведением к одному типу, то ты можешь очень неплохо ошибиться.

На закуску (обратите внимание, что это строки):
# php -r "var_dump('0xeb' == '+235e-0');";
bool(true)