C'est essentiellement la même chose que de fairereturn (bool) $row;
WildlyInaccurate
5
Je me demandais lequel d'entre eux est le plus rapide et nous avons (bool) comme gagnant. i.stack.imgur.com/dcnsM.png
Binod Kalathil
1
@Binod c'est une info agréable à avoir, merci pour ça!
Robin K
Réponses:
296
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, NULLchaînes vides ou tableaux vides) vous obtiendrez la valeur booléenne FALSE.
Il est fonctionnellement équivalent à un cast en boolean:
"double-non-opérateur" ou "double non-opérateur" .. dépend de la manière dont vous le lisez.
nickf
9
@nickf pas vraiment, "l'opérateur double not" se réfère à un opérateur, pas l'acte d'utiliser l'opérateur not deux fois.
Theo
3
@Theo, c'est en fait un opérateur? L'interprète considère-t-il !!égal à (bool)dans ce cas? Ou un code machine différent sera-t-il exécuté en fonction de celui utilisé?
Vous pouvez en utiliser autant que vous le souhaitez. S'il y a un nombre impair de «franges» (points d'exclamation), ce sera une opération NON identique à !value, et s'il y a un nombre pair de franges, ce sera la même chose que (bool) value.
diamondsea
51
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 $rowserait converti en vrai, alors !! $rowest également vrai.
Mais si vous voulez y parvenir (bool) $row, vous devriez probablement utiliser juste cela - et non des expressions "intéressantes";)
Merci que cela a du sens, je n'ai jamais vu quelque chose comme ça dans un autre langage de programmation.
Andrei
16
L'utilisation !!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 !!.
NikiC
1
@nikic - Cela semble étrange, OMI ... car il 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?
viraptor
2
J'ai vu !! dans de nombreux programmes C comme une conversion sûre en 1/0. (Comme booléen n'est vraiment rien d'autre que 0 / "non zéro" en C.)
Prof. Falken
1
@viraptor, !!n'a rien d '"intéressant" comme vous l'avez prétendu. C'est partout, du C au JavaScript.
Pacerier
18
Cela signifie que si $rowa 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.
"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 «!».
return (bool) $row;
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éenneFALSE
.Il est fonctionnellement équivalent à un cast en
boolean
:return (bool)$row;
la source
!!
é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";)la source
!!
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'utiliserC++
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 retourneratrue
, sinonfalse
, 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
la source
"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?".
la source
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 «!».
la source
Regardons
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
pourrait être une expression
ainsi est
ainsi est
et
et ainsi de suite, comme chacun d'eux est une expression valide, le! opérateur peut être ajouté à chacun d'eux.
la source