Добрый день! Есть следующая задача Дано выражение:
$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
Вкратце - так происходит потому что работает приведение типов, поменяйте на тождественное равенство === и все изменится.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Код публикации сообщения на стенке пользователя почти из офдокументации facebook, вписал app_id, app_secret и token, но при выполнении пишет ошибку "Graph...
Подскажите, почему этот код не выводит метки, установленные по умолчанию в wordpress ? Меток много, но почему-то они не выводятся
При получении пакетов Update от BotAPI Telegram кириллические символы превращаются в абракадабру, при работе с другими хостами отображение корректное