Вопрос тестовый PHP

257
02 мая 2017, 08:16

Добрый день! Есть следующая задача Дано выражение:

$res = ($a==true && $b==false && $a==$b);

При каких значениях $a и $b, $res будет true?

Объясните, пожалуйста.

Answer 1

При следующем раскладе;

Когда $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);
Answer 2
$a = 'что угодно';
$b = 0;
var_dump($a==true && $b==false && $a==$b); //true

Ссылка на документацию про операторы сравнения: http://php.net/manual/ru/language.operators.comparison.php

Вкратце - так происходит потому что работает приведение типов, поменяйте на тождественное равенство === и все изменится.

READ ALSO
Ошибка Graph returned an error: Invalid appsecret_proof provided in the API argument

Ошибка Graph returned an error: Invalid appsecret_proof provided in the API argument

Код публикации сообщения на стенке пользователя почти из офдокументации facebook, вписал app_id, app_secret и token, но при выполнении пишет ошибку "Graph...

488
Почему не работает get_tags()?

Почему не работает get_tags()?

Подскажите, почему этот код не выводит метки, установленные по умолчанию в wordpress ? Меток много, но почему-то они не выводятся

237
Как изменить кодировку при хостинге на Heroku?

Как изменить кодировку при хостинге на Heroku?

При получении пакетов Update от BotAPI Telegram кириллические символы превращаются в абракадабру, при работе с другими хостами отображение корректное

269
Совместимость Laravel с Mysql и Php

Совместимость Laravel с Mysql и Php

Есть проект на Laravel 50

231