Operador doble no (!!) en PHP

¿Qué hace el operador double not do en PHP?

Por ejemplo:

return !! $row; 

¿Qué haría el código de arriba?

No es el “operador doble no”, es el operador no aplicado dos veces. ¡El correcto ! dará como resultado un booleano, independientemente del operando . ¡Entonces la izquierda ! negará ese booleano.

Esto significa que para cualquier valor verdadero (números distintos de 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) usted obtendrá el valor booleano FALSE .

Es funcionalmente equivalente a un elenco a boolean :

 return (bool)$row; 

Es lo mismo (o casi lo mismo, puede haber algún caso en la esquina) como lanzar al bool. Si $row se convertiría en verdadero, entonces !! $row !! $row también es cierto.

Pero si quiere alcanzar (bool) $row , probablemente debería usar solo eso, y no algunas expresiones “interesantes”;)

Significa que si $row tiene un valor truey , devolverá true , de lo contrario false , convirtiendo a un valor booleano.

Aquí hay ejemplos de expresiones para la conversión booleana de php docs.

 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 desee reducir un valor complejo a algo así como “¿hay algún valor?”.

Otra forma más humana, tal vez más simple, de “leer” no:

  • El primero ‘!’ 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.

Entonces, básicamente, el valor de entrada puede ser cualquier cosa, tal vez una cadena, pero usted quiere una salida booleana, entonces use el primer ‘!’. 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 ‘!’.