Добрый день! Есть следующая задача Дано выражение:
$res = ($a==true && $b==false && $a==$b);
При каких значениях $a и $b, $res будет true?
Объясните, пожалуйста.
При следующем раскладе;
Когда $a принимает строку любую кроме строки ноль ($a='0';) и пустой строки ($a='';)
А $b = 0; Именно нулю , потому что В PHP есть понятие приоритетов,И когда число сравнивается со строкой (0 == 'abc'), то приоритет у числа больше и строка приводится к числу 0 чтоб суметь сравнить. Вот одна из причин почему есть этот оператор ===;.
<?php
$a = 'abc';
$b = 0;
$res = ($a==true && $b==false && $a==$b);
var_dump($res);
?>
На пальцах перевожу выражение:
1) $a == true равно 'abc' == true ($а это строка и оно истинно) true == true = true
2) $b == false равно 0 == false ($b это ноль а ноль является ложью) false == false = true
3) И наконец $a == b равно 'abc' == 0 (у нуля приоритет больше поскольку он число, и строка абс приводится к числу, но поскольку ему нет числового соответсвия то приводится к нулю) 0 == 0 = true
и получается
$res = (true && true && true);
$a = 'что угодно';
$b = 0;
var_dump($a==true && $b==false && $a==$b); //true
Ссылка на документацию про операторы сравнения: http://php.net/manual/ru/language.operators.comparison.php
Вкратце - так происходит потому что работает приведение типов, поменяйте на тождественное равенство === и все изменится.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости