Lo que hace el doble no operador en PHP?
Por ejemplo:
return !! $row;
¿Qué haría el código anterior?
Lo que hace el doble no operador en PHP?
Por ejemplo:
return !! $row;
¿Qué haría el código anterior?
Respuestas:
No es el "operador doble no", es el operador no aplicado dos veces. El derecho !
dará como resultado un booleano, independientemente del operando . Entonces la izquierda !
negará ese booleano.
Esto significa que para cualquier valor verdadero (números que no sean cero, cadenas y matrices no vacías, etc.) obtendrá el valor booleano TRUE
, y para cualquier valor falso (0, 0.0, NULL
cadenas vacías o matrices vacías) obtendrá El valor booleano FALSE
.
Funcionalmente es equivalente a un elenco para boolean
:
return (bool)$row;
!!
igual (bool)
en este caso? ¿O se ejecutará un código de máquina diferente según cuál se use?
!value
, y si hay un número par de golpes, será el mismo (bool) value
.
Es lo mismo (o casi lo mismo, puede haber algún caso de esquina) como lanzar a bool. Si $row
se convertiría en verdadero, entonces !! $row
también es cierto.
Pero si quieres lograrlo (bool) $row
, probablemente deberías usar solo eso, y no algunas expresiones "interesantes";)
!!
es un hábito restante de la programación en C (++). En C hacer un lanzamiento no es tan fácil como en PHP, puede obtener muchos problemas diferentes, compilar advertencias, etc. Así las personas lanzan al boll usando !!
.
operator!
es sobrecargable, usarlo C++
sería peligroso. Tampoco puedes lanzar estructuras en C, o usarlas !
con ellas. Además, si se puede negar algo, lo más probable es que pueda devolverlo desde una función que devuelve int, lo que lo convierte en un booleano. ¿Estás seguro de que estás hablando de C?
!!
no es nada "interesante" como lo has dicho. Está por todas partes desde C a JavaScript.
Significa que si $row
tiene un valor verdadero , devolverá true
, de lo contrario false
, se convertirá en un valor booleano.
Aquí hay expresiones de ejemplo para la conversión booleana de documentos 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
"no no" es una forma conveniente en muchos idiomas para comprender qué valor de verdad asigna el lenguaje al resultado de cualquier expresión. Por ejemplo, en Python :
>>> not not []
False
>>> not not [False]
True
Puede ser conveniente en lugares donde desea reducir un valor complejo a algo como "¿hay algún valor?".
Otra forma más humana, quizás más simple, de "leer" el no no:
El primero '!' hace 2 cosas: 'convierte' el valor a booleano, luego genera su opuesto. Entonces dará verdadero si el valor es 'falso'.
El segundo '!' es solo para generar el opuesto al primero.
Entonces, básicamente, el valor de entrada puede ser cualquier cosa, tal vez una cadena, pero desea una salida booleana, así que use el primer '!'. En este punto, si desea VERDADERO cuando el valor de entrada es 'falso', deténgase aquí y use un solo '!'; de lo contrario, si desea VERDADERO cuando el valor de entrada es 'verdadero', agregue otro '!'.
Miremos a
!$a;
En lugar de interpretar el! operador como tomar el
Opuesto booleano del valor a su derecha
leer
tomar el opuesto booleano de la expresión a su derecha
En este caso
$a;
podría ser una expresión
así es
!$a;
Asi es
!!$a;
y
!!!$a;
y así, como cada una de estas es una expresión válida, el! El operador puede anteponerse a cada uno de ellos.
return (bool) $row;