operadores - php string to boolean
¿Cómo funciona el verdadero/falso en PHP? (5)
Cero es falso, no cero es verdadero.
En php puedes probar más explícitamente usando el operador ===
.
if (0==false)
echo "works"; // will echo works
if (0===false)
echo "works"; // will not echo anything
Me pregunto cómo maneja PHP la comparación verdadero / falso internamente. Entiendo que true se define como 1 y false se define como 0. Cuando hago if("a"){ echo "true";}
echos " verdadero ". ¿Cómo reconoce PHP "a" como 1?
El mejor operador para un control estricto es
if($foo === true){}
De esta forma, realmente está comprobando si es verdadero, y no 1 o simplemente establecido.
Esto está cubierto en la documentación de PHP para booleans y tablas de comparación de tipos .
Al convertir a booleano, los siguientes valores se consideran FALSOS:
- el booleano
FALSE
sí mismo - el entero
0
(cero) - el flotador
0.0
(cero) - la cadena vacía y la cadena
''0''
- una matriz con cero elementos
- un objeto con variables miembro cero (solo PHP 4)
- el tipo especial
NULL
(incluidas las variables no ajustadas) - Objetos SimpleXML creados a partir de etiquetas vacías
Cualquier otro valor se considera VERDADERO .
PHP usa tipeo débil (que llama ''malabarismo''), lo cual es una mala idea (aunque eso es una conversación para otro momento). Cuando intenta utilizar una variable en un contexto que requiere un booleano, convertirá cualquier variable que esté en un booleano, de acuerdo con algunas reglas en su mayoría arbitrarias disponibles aquí: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
pensar en el operador como función unaria: is_false(type value)
que devuelve verdadero o falso, dependiendo de la implementación exacta para el tipo y valor específico. Considere si la declaración para invocar dicha función implícitamente, a través del azúcar sintáctico.
Otra posibilidad es que el tipo tenga operador de conversión, lo que convierte el tipo en otro tipo implícitamente, en este caso cadena a booleana.
PHP no expone estos detalles, pero C ++ permite la sobrecarga del operador, que expone detalles precisos de la implementación del operador.