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

  • Аффтопрограммирование

    В автомобили уже давно ставят компьютер с бортовой самодиагностикой. До 1996 года единообразия работы с этим компьютером не было, а теперь везде…

  • Компьютерное

    Проапгрейдил жёсткий диск в компьютере. Был 1 “терабайт”, стало 2. В кавычках потому что производители используют альтернативную…

  • Доломал минимакс

    Вот многие считают, на мой взгляд, необоснованно, что машина, созданная человеком, завсегда будет дурнее создателя. По моему опыту, верно обратное…

  • 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

  • Аффтопрограммирование

    В автомобили уже давно ставят компьютер с бортовой самодиагностикой. До 1996 года единообразия работы с этим компьютером не было, а теперь везде…

  • Компьютерное

    Проапгрейдил жёсткий диск в компьютере. Был 1 “терабайт”, стало 2. В кавычках потому что производители используют альтернативную…

  • Доломал минимакс

    Вот многие считают, на мой взгляд, необоснованно, что машина, созданная человеком, завсегда будет дурнее создателя. По моему опыту, верно обратное…