Двойной не (!!) оператор в PHP

Что делает двойной оператор не в PHP?

Например:

return !! $row;

Что сделал бы код выше?

Ответ 1

Это не "двойной оператор", а оператор не, применяемый дважды. Правильный ! приведет к логическому, независимо от операнда. Тогда левый ! будет отрицать это логическое значение.

Это означает, что для любого истинного значения (числа, отличные от нуля, непустых строк и массивов и т.д.) вы получите логическое значение TRUE и для любого ложного значения (0, 0.0, NULL, пустые строки или пустые массивы) вы получите значение boolean FALSE.

Он функционально эквивалентен приведению в boolean:

return (bool)$row;

Ответ 2

Это то же самое (или почти то же самое - может быть, какой-то угловой случай) как литье в bool. Если $row будет отбрасываться на true, то также будет !! $row.

Но если вы хотите достичь (bool) $row, вы должны, вероятно, использовать именно это, а не некоторые "интересные" выражения;)

Ответ 3

Это означает, что если $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

Ответ 4

"not not" - это удобный способ на многих языках для понимания того, что значение истины присваивает языку результату любого выражения. Например, в Python:

>>> not not []
False
>>> not not [False]
True

Это может быть удобно в тех местах, где вы хотите уменьшить сложное значение до чего-то вроде "есть ли значение вообще?".