Двойной не (!!) оператор в PHP
Что делает двойной оператор not в PHP?
Например:
return !! $row;
Что будет делать код выше?
5 ответов
Это не "двойной оператор не", это не оператор применяется дважды. Право !
приведет к булеву, независимо от операнда. Тогда левый !
будет сводить на нет это логическое.
Это означает, что для любого истинного значения (числа, отличные от нуля, непустые строки и массивы и т. Д.) Вы получите логическое значение TRUE
и для любого ложного значения (0, 0,0, NULL
, пустые строки или пустые массивы) вы получите логическое значение FALSE
,
Это функционально эквивалентно приведению к boolean
:
return (bool)$row;
Это то же самое (или почти то же самое - может быть какой-то угловой случай), что и приведение к bool. Если $row
бросил бы к истине, то !! $row
тоже верно.
Но если вы хотите достичь (bool) $row
Вы, вероятно, должны использовать только это - а не некоторые "интересные" выражения;)
Это означает, что если $row
имеет истинное значение, он вернется true
, иначе false
, преобразовывая в логическое значение.
Вот пример выражения для логического преобразования из php docs.
Expression Boolean
$x = ""; FALSE
$x = null; FALSE
var $x; FALSE
$x is undefined FALSE
$x = array(); FALSE
$x = array('a', 'b'); TRUE
$x = false; FALSE
$x = true; TRUE
$x = 1; TRUE
$x = 42; TRUE
$x = 0; FALSE
$x = -1; TRUE
$x = "1"; TRUE
$x = "0"; FALSE
$x = "-1"; TRUE
$x = "php"; TRUE
$x = "true"; TRUE
$x = "false"; TRUE
"не нет" - это удобный способ для многих языков понять, какое значение истинности язык присваивает результату любого выражения. Например, в Python:
>>> not not []
False
>>> not not [False]
True
Это может быть удобно в тех местах, где вы хотите уменьшить сложное значение до чего-то вроде "есть ли значение вообще?".
Еще один более человечный, возможно, более простой способ "читать", а не нет:
Первый '!' выполняет 2 действия: "конвертирует" значение в логическое значение, а затем выводит противоположное значение. Таким образом, это даст значение true, если значение является "ложным".
Второй '!' это просто вывести противоположность первого.
Итак, в основном, входное значение может быть любым, может быть строкой, но вы хотите логический вывод, так что используйте первый '!'. На этом этапе, если вы хотите ИСТИНА, когда входное значение равно "ложь", остановитесь здесь и просто используйте один "!"; в противном случае, если вы хотите ИСТИНА, когда входное значение "истинно", добавьте еще один "!".
Давайте посмотрим на
!$a;
Вместо того, чтобы интерпретировать! оператор как принимающий
Логическое значение, противоположное значению справа
читать
возьмите логическое значение, противоположное выражению справа
В этом случае
$a;
может быть выражением
так что это
!$a;
так это
!!$a;
а также
!!!$a;
и так далее, поскольку каждое из них является допустимым выражением, символ! Оператор может быть добавлен к каждому из них.