Тип-литье в булево Может кто-нибудь объяснить мне, почему это: var_dump((bool) 1==2); возвращает bool(true) но var_dump(1==2); возвращает bool(false) Конечно, второе возвращение верно, но почему в первый раз php возвращает неожиданное значение? Ответ 1 На самом деле это не так странно. (bool) имеет более высокий приоритет, чем ==, так что: var_dump((bool) 1==2); эквивалентно этому: var_dump( ((bool) 1) == 2); или это: var_dump(true == 2); Из-за типа жонглирования, 2 также по существу получает отличное от bool (так как это "свободное сравнение" ) поэтому он эквивалентен этому: var_dump(true == true); или это: var_dump(true); Ответ 2 Потому что в первом примере литье происходит перед сравнением. Так что, как будто вы написали ((bool) 1)==2 что эквивалентно true == 2 который вычисляется путем преобразования 2 в true и сравнения, в конечном итоге производя true. Чтобы увидеть ожидаемый результат, вам нужно добавить parens, чтобы сделать порядок явным: var_dump((bool)(1==2)); Посмотрите на действие. Ответ 3 Я использую этот способ: !!0 (false) !!1 (true) Ответ 4 То, как вы написали оператор ((bool) 1 == 2), всегда будет возвращать true, потому что он всегда будет выполнять код, как показано ниже: Сначала он выполнит (bool)1 и (bool) 1 вернет true. Теперь, когда (bool) 1 на втором шаге будет истинным, ваш оператор будет выглядеть как true ==2 Так как если мы будем выводить 2 в boolean, он вернет true, в конечном состоянии ваш оператор будет выглядеть как true == true Что, очевидно, вернет true. То же самое, что я объяснил год назад в своем сообщении PHP Type casting.
Ответ 1 На самом деле это не так странно. (bool) имеет более высокий приоритет, чем ==, так что: var_dump((bool) 1==2); эквивалентно этому: var_dump( ((bool) 1) == 2); или это: var_dump(true == 2); Из-за типа жонглирования, 2 также по существу получает отличное от bool (так как это "свободное сравнение" ) поэтому он эквивалентен этому: var_dump(true == true); или это: var_dump(true);
Ответ 2 Потому что в первом примере литье происходит перед сравнением. Так что, как будто вы написали ((bool) 1)==2 что эквивалентно true == 2 который вычисляется путем преобразования 2 в true и сравнения, в конечном итоге производя true. Чтобы увидеть ожидаемый результат, вам нужно добавить parens, чтобы сделать порядок явным: var_dump((bool)(1==2)); Посмотрите на действие.
Ответ 4 То, как вы написали оператор ((bool) 1 == 2), всегда будет возвращать true, потому что он всегда будет выполнять код, как показано ниже: Сначала он выполнит (bool)1 и (bool) 1 вернет true. Теперь, когда (bool) 1 на втором шаге будет истинным, ваш оператор будет выглядеть как true ==2 Так как если мы будем выводить 2 в boolean, он вернет true, в конечном состоянии ваш оператор будет выглядеть как true == true Что, очевидно, вернет true. То же самое, что я объяснил год назад в своем сообщении PHP Type casting.