Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: работа с функцией md5

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
NWH
Отправлено: 28 Июня, 2010 - 20:35:38
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Всем Хай!

Наткнулся у себя в скриптах на непонятное (мне Улыбка ) явление в работе скрипта:

$h=0;

if ($h==md5(md5(0).'ffghrt'))
{
echo "прошел";
}
else
{
echo "не прошел";
}

При вызове выдаст "прошел". Почему так получается?
Конструкция md5(md5(0).'ffghrt') дает bb3488f04c2ba06c9ccd7014b7b33286, почему она равна нулю?

Хочется понять суть ошибки.
Если использовать === то все работает правильно.

Заранее спасибо.

(Отредактировано автором: 28 Июня, 2010 - 20:37:18)

 
 Top
awiz
Отправлено: 28 Июня, 2010 - 23:00:15
Post Id



Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




они сравниваются как числа, а эта строка стает нулем

(Отредактировано автором: 28 Июня, 2010 - 23:08:25)

 
 Top
Uchkuma
Отправлено: 29 Июня, 2010 - 09:39:40
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Приведение типов. Может получиться и так, что сработает "не прошел", если строка хеша md5 будет начинаться с числа.

Вам помогут следующие статьи:
http://www.php.su/learnphp/datat.../?mn#typecasting
http://www.php.su/learnphp/datat.../?compare_tables

(Отредактировано автором: 29 Июня, 2010 - 09:54:08)

 
 Top
JustUserR
Отправлено: 29 Июня, 2010 - 16:38:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




NWH пишет:
Хочется понять суть ошибки.
Если использовать === то все работает правильно.
Во всех языках программирования со свободной динамической типизацией данных и с автоматическими преобразованием типов - операторы равенства и идентичности могут сильно отличаться в результатах своей работы поскольку они действуют по-разному Оператор равенства может хорошо работать с данными одинакового типа - однако при использовании в нем операндов разного типа происходит автоматическое неявное преобразование - которое может быть неочевидно на первый взгляд К примеру с точки зрения стандартной логической системы следующие выражения полностью эквивалентны - if($a==false) { if($b==false) {} } и if( ($a==false) && ($a==$b)) {} - однако не в динамических языках типа PHP - при выполнении первого условия сначала операнд $a будет приведен к логическому типу и если это было значение 0 то оно пребразуется в false - а при выполнеии второго условия сначала false преобразуется к строке и потом сравнится как true как непустая строка
Аналогичным образом операторы проверку на равенство нельзя использовать для определения состояния переменной - например для пустой строки и нуля и несуществующей переменной то есть значения null - проверка на равенстно их false всегда вернет значение true - в то время как проверка на идентичность покажет нужное значение
Если рассматривать язык Perl то в нем существует отдельная група операторов сравнения для чисел и логических значений и отдельно для строк - причем почти все стороки при сравнии на равентсво числовое == будет равны


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
NWH
Отправлено: 29 Июня, 2010 - 20:17:41
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Всем большое С П А С И Б О, прояснилось Улыбка
 
 Top
JustUserR
Отправлено: 30 Июня, 2010 - 14:28:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




NWH пишет:
Всем большое С П А С И Б О, прояснилось
Пожалуйста! Кстати оператор идентичнсти можно выразить через оператор обычного сравнения дополнив его дополнительным усовием - например $a===$b это тоже самое что и ($a==$b)&&(gettype($a)==gettype($b)) Кроме того использование отдельных секций в условиях можно использовать для отключения автоматического приведения типов и использование собственной конвертации


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB