Я ловлю себя на том, что делаю такие вещи довольно часто:
$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)
... но это довольно уродливо и противоречит цели использования сокращенного синтаксиса присваивания, поскольку нам нужно использовать другой оператор, чтобы вернуть тип к логическому.
То, что я действительно хотел бы сделать, это что-то вроде этого:
$foo = true;
$foo &&= false; // bool(false)
... но &&=
и ||=
, очевидно, недопустимые операторы. Итак, мой вопрос: есть ли какой-то другой слащавый синтаксис или, может быть, неясная основная функция, которая могла бы служить заменой? С такими короткими переменными, как $foo
, несложно просто использовать синтаксис $foo = $foo && false
, но элементы массива с несколькими измерениями и/или вызовы объектных методов могут сделать синтаксис довольно длинным.
$some['big']['long']['variable'] = $some['big']['long']['variable'] && $some['other']['boolean'];
). - person FtDRbwLXw6   schedule 09.07.2013$foo &= false;
и$foo &&= false;
для$foo = true
. Поэтому я не вижу проблемы/цели. - person Jason McCreary   schedule 09.07.2013int(0)
, а второе даетbool(false)
. Итак, хотя0 == false
из-за неявного приведения типов,0 !== false
. - person FtDRbwLXw6   schedule 09.07.2013