Что делает двойной оператор не в PHP?
Например:
return !! $row;
Что сделал бы код выше?
Что делает двойной оператор не в PHP?
Например:
return !! $row;
Что сделал бы код выше?
Это не "двойной оператор", а оператор не, применяемый дважды. Правильный !
приведет к логическому, независимо от операнда. Тогда левый !
будет отрицать это логическое значение.
Это означает, что для любого истинного значения (числа, отличные от нуля, непустых строк и массивов и т.д.) вы получите логическое значение TRUE
и для любого ложного значения (0, 0.0, NULL
, пустые строки или пустые массивы) вы получите значение boolean FALSE
.
Он функционально эквивалентен приведению в boolean
:
return (bool)$row;
Это то же самое (или почти то же самое - может быть, какой-то угловой случай) как литье в bool. Если $row
будет отбрасываться на true, то также будет !! $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
"not not" - это удобный способ на многих языках для понимания того, что значение истины присваивает языку результату любого выражения. Например, в Python:
>>> not not []
False
>>> not not [False]
True
Это может быть удобно в тех местах, где вы хотите уменьшить сложное значение до чего-то вроде "есть ли значение вообще?".