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

Форум PHP

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

 

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

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

тема: разбор простой функции - проблема
 
 автор: starpom   (18.08.2010 в 23:01)   письмо автору
 
 

Не могу разобраться почему $result не равна false в первом условии и тут же равна false во втором:

function diff($one, $two = false)                    
    { 
        $result = $one + 105;
        
        if ($result === false)  
             echo "результ равен фолсу по непонятным причинам <br>"; 
        else 
             echo "результ пока не равен фолсу<br>";  

        if($result === false || $two) 
              echo "результ равно второй переменной ".$result." = ".$two."<br> или же уже равен фолсу! Почему? ";
        else 
              echo "результ не равно второй или первой переменной";
    }
    
    
    diff(15 , 10);

  Ответить  
 
 автор: .....   (18.08.2010 в 23:20)
 
   для: starpom   (18.08.2010 в 23:01)
 

diff(5);

  Ответить  
 
 автор: starpom   (19.08.2010 в 00:02)   письмо автору
 
   для: .....   (18.08.2010 в 23:20)
 

Спасибо, если при отсутствии второго аргумента в функции, во второе условие попадет дефолтный false, то условие не срабатывает, так как $result фолсу вроде не равна (я так понимаю),
НО с каких делов условие срабатывает, если туда попадает переменная, значению которой $result тоже не равна. Вот это я не понимаю. Если бы троекратное равно (===) сравнивало исключительно типы данных, то было бы ясно , а так ?????

  Ответить  
 
 автор: Gubichev   (19.08.2010 в 00:13)   письмо автору
 
   для: starpom   (19.08.2010 в 00:02)
 

НО с каких делов условие срабатывает, если туда попадает переменная, значению которой $result тоже не равна.

Это вы про переменную two?
Условие будет TRUE если переменная two<>0

  Ответить  
 
 автор: starpom   (19.08.2010 в 00:27)   письмо автору
 
   для: Gubichev   (19.08.2010 в 00:13)
 

Да , я про это.
Условие будет TRUE если переменная two<>0
Я так понимаю, что если первый элемент для сравнения - булев тип (false), то и второй "преобразуеться" в такой же, и если $result <>0, тоесть true, и с $two та же ситуация, то условие
работает?

  Ответить  
 
 автор: Gubichev   (19.08.2010 в 00:39)   письмо автору
 
   для: starpom   (19.08.2010 в 00:27)
 

Да ничего там не преобразуется. Не понятно почему во втором условном операторе TRUE?
Объясняю.
$result === false и должна быть ЛОЖЬ, НО у нас же есть второй элемент со значением отличным от нуля, а значит $two - ИСТИНА.

if(ЛОЖЬ || ИСТИНА) = ИСТИНА

  Ответить  
 
 автор: starpom   (19.08.2010 в 01:04)   письмо автору
 
   для: Gubichev   (19.08.2010 в 00:39)
 

Ну я это и имел ввиду, если первый булев тип , то и второй будет восприниматься как таковой, а значения переменных уже не в расчет? Хотя вроде как используем строгое сравнение , в котором я думал наивный раньше , должно быть равенство и по типу данных и по значению?

  Ответить  
 
 автор: Trianon   (19.08.2010 в 11:00)   письмо автору
 
   для: starpom   (19.08.2010 в 01:04)
 

$result === false || $two  

||||||||||||||||||
( $result === false )  || $two  

  Ответить  
 
 автор: starpom   (19.08.2010 в 15:14)   письмо автору
 
   для: Trianon   (19.08.2010 в 11:00)
 

Кажись разобрался, спасобо всем, кто поучаствовал.

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

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