web-dev-qa-db-fra.com

Double opérateur non (!!) dans PHP

Que fait l'opérateur double pas en PHP?

Par exemple:

return !! $row;

Que ferait le code ci-dessus?

176
Andrei

Ce n'est pas l'opérateur "double not", c'est l'opérateur not appliqué deux fois. La droite ! donnera un booléen, quel que soit l'opérande . Puis la gauche ! annulera ce booléen.

Cela signifie que pour toute valeur vraie (nombres autres que zéro, chaînes et tableaux non vides, etc.), vous obtiendrez la valeur booléenne TRUE, et pour toute valeur fausse (0, 0,0, NULL, des chaînes vides ou des tableaux vides) vous obtiendrez la valeur booléenne FALSE.

Il est fonctionnellement équivalent à un transtypage en boolean:

return (bool)$row;
270
Theo

C'est la même chose (ou presque la même - il pourrait y avoir un cas d'angle) que le casting à bool. Si $row serait converti en vrai, puis !! $row est également vrai.

Mais si vous voulez atteindre (bool) $row, vous devriez probablement utiliser juste cela - et non des expressions "intéressantes";)

50
viraptor

Cela signifie que si $row a une valeur véridique , il renverra true, sinon false, convertissant en une valeur booléenne.

Voici des exemples d'expressions pour la conversion booléenne à partir de documents php.

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
17
YOU

"not not" est un moyen pratique dans de nombreuses langues pour comprendre quelle valeur de vérité la langue attribue au résultat d'une expression. Par exemple, dans Python :

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

Cela peut être pratique dans les endroits où vous souhaitez réduire une valeur complexe à quelque chose comme "y a-t-il une valeur?".

7
Steve Bennett

Une autre façon plus humaine, peut-être plus simple, de "lire" le non:

  • La première '!' fait 2 choses: 'convertir' la valeur en booléen, puis sortir son opposé. Donc, cela donnera vrai si la valeur est "fausse".

  • La deuxième '!' est juste de sortir l'opposé du premier.

Donc, fondamentalement, la valeur d'entrée peut être n'importe quoi, peut-être une chaîne, mais vous voulez une sortie booléenne, utilisez donc le premier '!'. À ce stade, si vous voulez VRAI lorsque la valeur d'entrée est "fausse", arrêtez-vous ici et utilisez simplement un seul "!"; sinon, si vous voulez VRAI lorsque la valeur d'entrée est "véridique", ajoutez un autre "!".

1
Luca Reghellin