¿Qué hace el operador doble en PHP?Operador doble no (!!) en PHP
Por ejemplo:
return !! $row;
¿Cómo sería el código de seguridad hacer?
¿Qué hace el operador doble en PHP?Operador doble no (!!) en PHP
Por ejemplo:
return !! $row;
¿Cómo sería el código de seguridad hacer?
no es el "doble operador not", que es el operador no aplica dos veces. El !
derecho dará como resultado un booleano, independientemente del operando. Entonces, el !
izquierdo negará ese booleano.
Esto significa que para cualquier valor verdadero (número distinto de cero, las cadenas no vacías y matrices, 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
.
Es funcionalmente equivalente a un elenco de boolean
:
return (bool)$row;
"doble no operador" o "doble no operador" .. depende de cómo lo lea. – nickf
@nickf no realmente, "el operador no doble" se refiere a un operador, no el acto de usar el operador no dos veces. – Theo
@Theo, ¿En realidad es un operador? ¿Considera el intérprete '!!' igual a '(bool)' en este caso? ¿O se ejecutará un código de máquina diferente dependiendo de cuál se use? – Pacerier
Es lo mismo (o casi lo mismo - podría haber algún caso en la esquina) como castear a bool. Si $row
se convertiría en verdadero, entonces !! $row
también es verdadero.
Pero si se quiere lograr (bool) $row
, probablemente debería utilizar sólo eso - y no algunas expresiones "interesantes";)
Gracias que realmente tiene sentido, nunca he visto algo como esto en otro lenguaje de programación. – Andrei
Usar '!!' es un hábito que queda de la programación en C (++). En C hacer un cast no es tan fácil como en PHP, puedes obtener muchos problemas diferentes, compilar advertencias, a.s.o. Por lo tanto, la gente lanza al cascar usando '!!'. – NikiC
@nikic - Parece extraño, IMO ... ya que 'operator!' Es sobrecargable, usarlo en 'C++' sería peligroso. Tampoco puedes lanzar estructuras en C, o usar '!' Con ellas. Además, si se puede negar algo, lo más probable es que lo devuelva desde una función que devuelve int, que prácticamente lo convierte en booleano. ¿Estás seguro de que estás hablando de C? – viraptor
Esto significa que si $row
tiene un valor truthy, volverá true
, de lo contrario false
, la conversión a 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 manera conveniente en muchos idiomas para la comprensión de lo que el lenguaje valor de verdad asigna al resultado de cualquier expresión. Por ejemplo, en Python:
>>> not not []
False
>>> not not [False]
True
Puede ser conveniente en los lugares donde se desea reducir un valor complejo a algo así como "no es un valor en absoluto?".
Otro, quizás más simple, mucho más humana de 'leer' el no no: '!'
La primera hace 2 cosas: 'convierte' el valor a booleano, luego saca su opuesto. Por lo tanto, dará verdadero si el valor es falso.
El segundo '!' es solo para producir el opuesto al primero.
Así que, básicamente, el valor de entrada puede ser cualquier cosa, tal vez una cadena, pero que desea una salida booleana, a fin de utilizar la primera '!'. En este punto, si quiere TRUE cuando el valor de entrada es 'falsy', entonces deténgase aquí y simplemente use un único '!'; de lo contrario, si desea VERDADERO cuando el valor de entrada es 'verdad', entonces agregue otro '!'.
Esto es esencialmente lo mismo que hacer 'return (bool) $ row;' – WildlyInaccurate
Me preguntaba cuál de ellos es más rápido y tenemos (bool) como ganador. https://i.stack.imgur.com/dcnsM.png – Binod