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
Форумы портала PHP.SU :: Версия для печати :: Нюансы логических выражений в php
Форумы портала PHP.SU » PHP » Программирование на PHP » Нюансы логических выражений в php

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

1. Haron - 16 Ноября, 2012 - 16:36:10 - перейти к сообщению
Здравствуйте, обнаружил интересную вещь:

Вот собственно - есть такой код:

PHP:
скопировать код в буфер обмена
  1. $r = <любое число>;
  2. if ($r == (2 or 3))
  3. {
  4.         echo 1;
  5. }
  6. // - Выведет 1
  7.  
  8. $r = 3
  9. if ($r === (2 or 3))
  10. {
  11.         echo 1;
  12. }
  13. // - Не выведет ничего.
  14.  


Вопрос, почему так?
2. EuGen - 16 Ноября, 2012 - 16:41:01 - перейти к сообщению
2 or 3 это будет булево true.
== есть сравнение без учета типа данных (приведение типов),
=== есть сравнение с учетом типа данных

То есть, например, если в <любое число> указать 0, то и первое условие не выполнится. Ну а так - да, любое отличное от нуля число будет при приведении к булевому типу равно true.
По поводу второго же сравнения - и так понятно, 3 (и какое угодно число) не будет равно с учетом типа данных true.
Посмотрите таблицу приведения типов - все станет понятно.
3. Haron - 17 Ноября, 2012 - 07:13:28 - перейти к сообщению
Посмотрел таблицу. Да, динамическая типизация - это очень удобно и интуитивно понятно...

(array() == null) = true - вот это удивило

("php" == 0) = true, но ("php" === 0) = false - а это какбе символизирует суть языка для непосвящённых, да Улыбка. (При взгляде со стороны - php это ноль, но при ближайшем рассмотрении - уже не ноль)

 

Powered by ExBB FM 1.0 RC1