Que fait l' opérateur double not en PHP?
Par exemple:
return !! $row;
Que ferait le code ci-dessus?
Que fait l' opérateur double not en PHP?
Par exemple:
return !! $row;
Que ferait le code ci-dessus?
Réponses:
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 . Ensuite, 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
chaînes vides ou tableaux vides) vous obtiendrez la valeur booléenne FALSE
.
Il est fonctionnellement équivalent à un cast en boolean
:
return (bool)$row;
!!
égal à (bool)
dans ce cas? Ou un code machine différent sera-t-il exécuté en fonction de celui utilisé?
!value
, et s'il y a un nombre pair de franges, ce sera la même chose que (bool) value
.
C'est la même chose (ou presque la même chose - il peut y avoir un cas d'angle) que la conversion en booléen. Si $row
serait converti en vrai, alors !! $row
est également vrai.
Mais si vous voulez y parvenir (bool) $row
, vous devriez probablement utiliser juste cela - et non des expressions "intéressantes";)
!!
est une habitude restante de la programmation en C (++). En C faire un casting est pas aussi facile en PHP, vous pouvez obtenir de nombreux problèmes, les avertissements de compilation, aso Ainsi les gens jettent à Böll en utilisant !!
.
operator!
est surchargeable, l'utiliser C++
serait dangereux. Vous ne pouvez pas non plus convertir des structures en C ni les utiliser !
avec elles. De plus, si quelque chose peut être annulé, vous êtes probablement en mesure de le renvoyer à partir d'une fonction retournant int, ce qui en fait à peu près un booléen. Êtes-vous sûr de parler de C?
!!
n'a rien d '"intéressant" comme vous l'avez prétendu. C'est partout, du C au JavaScript.
Cela signifie que si $row
a une valeur de vérité , il retournera true
, sinon false
, la conversion en une valeur booléenne.
Voici des exemples d'expressions de 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
"pas non" est un moyen pratique dans de nombreuses langues pour comprendre quelle valeur de vérité la langue attribue au résultat de toute expression. Par exemple, en 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 du tout?".
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 afficher son opposé. Donc, il donnera vrai si la valeur est «falsifiée».
La deuxième '!' est juste de sortir le contraire 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, alors utilisez le premier '!'. À ce stade, si vous voulez TRUE lorsque la valeur d'entrée est "falsy", arrêtez-vous ici et utilisez simplement un seul "!"; sinon, si vous voulez TRUE lorsque la valeur d'entrée est «truey», ajoutez un autre «!».
Regardons
!$a;
Plutôt que d'interpréter le! opérateur comme prenant le
Booléen opposé à la valeur à sa droite
lis
prendre l'opposé booléen de l' expression à sa droite
Dans ce cas
$a;
pourrait être une expression
ainsi est
!$a;
ainsi est
!!$a;
et
!!!$a;
et ainsi de suite, comme chacun d'eux est une expression valide, le! opérateur peut être ajouté à chacun d'eux.
return (bool) $row;