Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите понять код if (!file_exists("ip.txt")==false)
 
 автор: Gubichev   (21.09.2009 в 00:08)   письмо автору
 
 

Натолкнулся на такой код и нигде не могу найти описание:

if (!file_exists("ip.txt")==false)


За что отвечает восклицательный знак перед "file_exists" и за что "==false" в конце? И есть ли смысл их использовать одновременно (разницы не заметил)?

  Ответить  
 
 автор: neadekvat   (21.09.2009 в 00:13)   письмо автору
 
   для: Gubichev   (21.09.2009 в 00:08)
 

что-то надо убрать
Я бы убрал "==false"
Воскл. знак означает "Не".
if (!file_exists("ip.txt"))

То есть здесь условие станет верным, если файл не существует. Если бы воскл. знака не было, то условие было верным, если б вайл существовал

  Ответить  
 
 автор: Gubichev   (21.09.2009 в 00:23)   письмо автору
 
   для: neadekvat   (21.09.2009 в 00:13)
 

Всем спасибо, разобрался.

  Ответить  
 
 автор: cheops   (21.09.2009 в 00:16)   письмо автору
 
   для: Gubichev   (21.09.2009 в 00:08)
 

Тут вероятно игра на приоритетах оператора == и !. false - это ложь, true - истина. Функция file_exists() возвращает true, если файл ip.txt существует и false - в противном случае. Приоритет оператора == больше, чем !, следовательно сначала значение сравнивается с false,
false == false => true
true == false => false
Затем результаты инвертируются при помощи оператора ! true заменяется на false, а false на ture. Короче, я так понимаю, кто решил выпендриться и заменил этой конструкцией классическое выражение
if(file_exists("ip.txt"))

  Ответить  
 
 автор: neadekvat   (21.09.2009 в 00:19)   письмо автору
 
   для: cheops   (21.09.2009 в 00:16)
 

Все оказалось куда сложнее, чем я думал о_О Индусский код, воистину.

  Ответить  
 
 автор: Trianon   (21.09.2009 в 00:54)   письмо автору
 
   для: cheops   (21.09.2009 в 00:16)
 

>Приоритет оператора == больше, чем !,

Утверждение ложное.

>следовательно сначала значение сравнивается с false,
>false == false => true , true == false => false
>Затем результаты инвертируются при помощи оператора !


<?php
$a 
5$b 3;
echo 
"<pre>";
echo 
'       $a :';var_dump($a);
echo 
'       $b :';var_dump($b);
echo 
'      !$a :';var_dump(!$a);
echo 
' $a == $b :';var_dump($a == $b);
echo 
'!$a == $b :';var_dump(!$a == $b);
?>


       $a :int(5)
       $b :int(3)
      !$a :bool(false)
 $a == $b :bool(false)
!$a == $b :bool(false)

Хоть это и несущественно, но могу предположить историю возникновения if(!file_exists("ip.txt")==false)
Автороров было двое. Один не знал об операторе ! (или считал его недостаточно наглядным)
Другой слизал уже имеющуюся где-то обратную проверку, и перевернул условие не думая, дописав операцию, работу которой понимал.

  Ответить  
 
 автор: cheops   (21.09.2009 в 01:01)   письмо автору
 
   для: Trianon   (21.09.2009 в 00:54)
 

Да, согласен - порядок выполнения обратный, хотя результат в конечном итоге тот же и эквивалентен обычной проверке функции file_exists(). Отрицание схлопывается с отрицанием.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования