Что делает двойной оператор not в PHP?
Например:
return !! $row;
Что будет делать код выше?
Что делает двойной оператор not в PHP?
Например:
return !! $row;
Что будет делать код выше?
Ответы:
Это не «двойной оператор не», это не оператор применяется дважды. Право !
приведет к логическому, независимо от операнда . Тогда левые !
будут отрицать это логическое значение.
Это означает, что для любого истинного значения (числа, отличного от нуля, непустые строки и массивы и т. Д.) Вы получите логическое значение TRUE
, а для любого ложного значения (0, 0,0 NULL
, пустые строки или пустые массивы) вы получите логическое значение FALSE
.
Функционально эквивалентно приведению к boolean
:
return (bool)$row;
!!
равным (bool)
в этом случае? Или будет запущен другой машинный код в зависимости от того, какой из них используется?
!value
, и если будет четное количество ударов, это будет так же, как (bool) value
.
Это то же самое (или почти то же самое - может быть какой-то угловой случай), что и приведение к bool. Если $row
бы привести к истине, то !! $row
тоже верно.
Но если вы хотите достичь (bool) $row
, вы, вероятно, должны использовать именно это - а не некоторые "интересные" выражения;)
!!
- это привычка, оставшаяся от программирования на C (++). В C делать приведение не так просто, как в PHP, вы можете получить много разных проблем, предупреждения компиляции, так что люди, таким образом, преобразуются в boll с помощью !!
.
operator!
как перегружен, использование его в C++
было бы опасно. Также вы не можете использовать структуры в Си или использовать !
их. Кроме того, если что-то можно отрицать, вы, скорее всего, сможете вернуть его из функции, возвращающей int, что в значительной степени делает его логическим. Вы уверены, что говорите о Си?
!!
ничего интересного, как ты так утверждал. Это повсеместно от C до JavaScript.
Это означает, что если $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, если значение является «ложным».
Второй '!' это просто вывести противоположность первого.
Итак, в основном, входное значение может быть любым, может быть строкой, но вы хотите логический вывод, поэтому используйте первый '!'. На этом этапе, если вы хотите, чтобы TRUE, когда входное значение было «ложно», остановитесь здесь и просто используйте один «!»; в противном случае, если вы хотите TRUE, когда входное значение равно «truey», добавьте еще один «!».
Давайте посмотрим на
!$a;
Вместо того, чтобы интерпретировать! оператор, как принимая
Булева противоположность значения справа
читать
возьмите логическое противоположное выражение справа от него
В таком случае
$a;
может быть выражением
так это
!$a;
так это
!!$a;
и
!!!$a;
и так далее, поскольку каждое из них является допустимым выражением,! Оператор может быть добавлен к каждому из них.
return (bool) $row;