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