Que fait l'opérateur double pas en PHP?
Par exemple:
return !! $row;
Que ferait le code ci-dessus?
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;
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";)
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
"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?".
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 "!".