nlothik (nlothik) wrote,
nlothik
nlothik

Category:

PHP порадовал

Нашёл старенький пример, который, оказывается, до сих пор работает.

var_dump(md5(‘240610708’) == md5(‘QNKCDZO’));

Выдаёт bool(true).

То-есть, MD5 хеши для строк ‘240610708’ и ‘QNKCDZO’ являются одинаковыми (с точки зрения PHP).

С нормальной точки зрения хеши неодинаковы. Первый 0e462097431906509019562988736854, второй — 0e830400451993494058024219903391.

Но. Оператор сравнения == в PHP может на ходу преобразовать тип данных (type mangling). Эти строки оно переделывает в цифры в экспоненциальной записи. Всё, что до ‘e’ — мантисса, всё, что потом — порядок. А так как мантисса у нас 0, её можно умножать хоть на чёрта лысого, она всё равно останется нулём. 0 == 0, естественно, возвращается true.

Вот, что случается, когда кто-то придумывает свой язык программирования с синтаксисом Си, но что-то записанное этим синтаксисом, работает не как в Си.

В PHP данная ошибка программиста (программиста ли?) лечится использованием специального оператора сравнения === вместо ==, т.е. строгим сравниванием вместо обычного, без преобразования типов.

Вот именно поэтому не следует учиться программированию на языках со слабой и динамической типизацией данных. На питонах, перлах и php можно, например, сравнить “1” и 5. А Джава незамедлительно пошлёт погромиста нахер: не сравнивай божий дар с яичницей. Плюс на Джаве то, что выглядит так как на Си, работает так же. Что, на мой взгляд, архиверно.

Mirrored from Лабораторный Журнал №6.

Tags: uncategorized
Subscribe

  • Терри Прэтчетт

    Прочитал очень забавный сборник коротких рассказов авторства Прэтчетта, называется “A Stroke of the Pen” (Росчерк пера). Прэтчетт…

  • Pi Day

    Т.к. дату в формате ММДДГГГГ обычно пишут только в США, специальный день календаря 3.14 получается сугубо американским. Ну, тогда вот вам шутку на…

  • Чадо получило тройбан

    Контрольная по основам биологии, в частности, зрению: Q: Как называются люди, которые не могут разглядеть далеко находящиеся предметы? A:…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 10 comments

  • Терри Прэтчетт

    Прочитал очень забавный сборник коротких рассказов авторства Прэтчетта, называется “A Stroke of the Pen” (Росчерк пера). Прэтчетт…

  • Pi Day

    Т.к. дату в формате ММДДГГГГ обычно пишут только в США, специальный день календаря 3.14 получается сугубо американским. Ну, тогда вот вам шутку на…

  • Чадо получило тройбан

    Контрольная по основам биологии, в частности, зрению: Q: Как называются люди, которые не могут разглядеть далеко находящиеся предметы? A:…