Cosa fa l' operatore double not in PHP?
Per esempio:
return !! $row;
Cosa farebbe il codice sopra?
Cosa fa l' operatore double not in PHP?
Per esempio:
return !! $row;
Cosa farebbe il codice sopra?
Risposte:
Non è il "doppio non operatore", è il non operatore applicato due volte. Il diritto !
si tradurrà in un valore booleano, indipendentemente dall'operando . Quindi la sinistra !
negherà quel booleano.
Ciò significa che per qualsiasi valore vero (numeri diversi da zero, stringhe e matrici non vuote, ecc.) Otterrai il valore booleano TRUE
e per qualsiasi valore falso (0, 0,0, NULL
stringhe vuote o matrici vuote) otterrai il valore booleano FALSE
.
Funzionalmente è equivalente a un cast per boolean
:
return (bool)$row;
!!
uguale (bool)
in questo caso? O verrà eseguito un codice macchina diverso a seconda di quale viene utilizzato?
!value
, e se c'è un numero pari di scoppi sarà lo stesso di (bool) value
.
È lo stesso (o quasi lo stesso - potrebbe esserci un caso d'angolo) del casting da far saltare. Se $row
verrebbe lanciato su true, allora !! $row
è anche true.
Ma se vuoi raggiungere (bool) $row
, probabilmente dovresti usare solo questo - e non alcune espressioni "interessanti";)
!!
è un'abitudine rimanente dalla programmazione in C (++). In C fare un cast non è facile come in PHP, puoi ottenere molti problemi diversi, compilare avvertimenti, così anche le persone che usano il cast per bollire !!
.
operator!
è sovraccarico, usarlo C++
sarebbe pericoloso. Inoltre non puoi lanciare le strutture in C, o usarle !
con esse. Inoltre, se qualcosa può essere negato, molto probabilmente sarai in grado di restituirlo da una funzione che restituisce int, il che lo rende praticamente un valore booleano. Sei sicuro di parlare di C?
!!
non è niente di "interessante" come hai affermato. È dappertutto da C a JavaScript.
Significa che se $row
ha un valore di verità , restituirà true
, altrimenti false
, la conversione in un valore booleano.
Ecco le espressioni di esempio per la conversione booleana dai documenti 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
"non non" è un modo conveniente in molte lingue per capire quale valore di verità la lingua assegna al risultato di qualsiasi espressione. Ad esempio, in Python :
>>> not not []
False
>>> not not [False]
True
Può essere conveniente in luoghi in cui si desidera ridurre un valore complesso fino a qualcosa come "esiste un valore?".
Un altro modo più umano, forse più semplice, di "leggere" il non:
Il primo '!' fa 2 cose: 'converti' il valore in booleano, quindi emette il suo opposto. Quindi darà vero se il valore è "falso".
Il secondo '!' è solo quello di produrre l'opposto del primo.
Quindi, in sostanza, il valore di input può essere qualsiasi cosa, forse una stringa, ma vuoi un output booleano, quindi usa il primo '!'. A questo punto, se vuoi TRUE quando il valore di input è 'falsy', fermati qui e usa un solo '!'; in caso contrario, se si desidera VERO quando il valore di input è "verità", aggiungere un altro "!".
Guardiamo
!$a;
Invece di interpretare il! operatore come prendere il
Opposto booleano del valore alla sua destra
leggere
prendere l'opposto booleano dell'espressione alla sua destra
In questo caso
$a;
potrebbe essere un'espressione
così è
!$a;
così è
!!$a;
e
!!!$a;
e così via, poiché ognuna di queste è un'espressione valida, la! l'operatore può essere anteposto a ciascuno di essi.
return (bool) $row;