Я часто занимаюсь такими вещами:
$foo = true;
$foo = $foo && false; // bool(false)
С побитовыми операторами вы можете использовать сокращение &=
и |=
:
$foo = 1;
$foo &= 0; // int(0)
Учитывая, что побитовые операции над 1
и 0
функционально эквивалентны булевым операциям с true
и false
, мы можем полагаться на литье типов и делать что-то вроде этого:
$foo = true;
$foo &= false; // int(0)
$foo = (bool)$foo; // bool(false)
... но это довольно уродливо и побеждает цель использования синтаксиса сокращенного присваивания, так как мы должны использовать другое утверждение, чтобы вернуть тип в boolean.
То, что я действительно хотел бы сделать, это примерно так:
$foo = true;
$foo &&= false; // bool(false)
... но &&=
и ||=
, очевидно, не являются действительными операторами. Итак, мой вопрос: есть ли какой-то другой сладкий синтаксис или, может быть, неясная основная функция, которая может служить в качестве stand-in? Поскольку переменные как короткие, чем $foo
, не стоит просто использовать синтаксис $foo = $foo && false
, но элементы массива с несколькими измерениями и/или вызовы метода объекта могут сделать синтаксис довольно продолжительным.