Двойной не (!!) оператор в PHP - PullRequest
172 голосов
/ 24 января 2010

Что делает оператор double not в PHP?

Например:

return !! $row;

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

Ответы [ 5 ]

264 голосов
/ 24 января 2010

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

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

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

return (bool)$row;
50 голосов
/ 24 января 2010

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

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

17 голосов
/ 24 января 2010

Это означает, что если $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
7 голосов
/ 29 ноября 2011

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

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

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

1 голос
/ 10 января 2018

Еще один, более простой, человеческий способ «читать», а не нет:

  • Первый '!' выполняет 2 действия: «конвертирует» значение в логическое значение, а затем выводит противоположное. Таким образом, оно будет иметь значение true, если значение является ложным.

  • Второе '!' просто вывести противоположность первого.

Таким образом, в основном, входное значение может быть любым, может быть строкой, но вы хотите логический вывод, поэтому используйте первый '!'. На этом этапе, если вы хотите, чтобы TRUE, когда входное значение было «ложно», остановитесь здесь и просто используйте один «!»; в противном случае, если вы хотите значение ИСТИНА, когда входное значение равно «истина», добавьте еще один «!».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...