Me pregunto cómo maneja PHP verdadero/falso comparación internamente. Entiendo que verdadero se define como 1 y falso se define como 0. Cuando lo hago if("a"){ echo "true";}
echos "true". ¿Cómo reconoce PHP "a" como 1?¿Cómo funciona el verdadero/falso en PHP?
Respuesta
Esto se explica en la documentación de PHP para booleans y type comparison tables.
Al convertir a boolean, los siguientes valores se consideran FALSO:
- el booleano
FALSE
sí - el número 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 cero miembro (PHP 4 solamente)
- el tipo especial
NULL
(incluyendo variables no definidas) - objetos SimpleXML creados a partir de etiquetas vacías
se considera TRUE Cada otro valor.
En realidad, hay numerosos valores que se convierten en falsos, incluidas las matrices vacías y nulas. ¿O se refería solo a cadenas? – sidereal
@sidereal: Publiqué todo el extracto ahora. Presione actualizar ;-) –
no es la convención usual 'cualquier otro valor que no sea 0 se considera FALSO' ?? como en linux shell. Estoy empezando a perder la fe en la comunidad de programadores – Blauhirn
Zero es falso, nonzero es verdadero.
En php puede probar más explícitamente con el operador ===
.
if (0==false)
echo "works"; // will echo works
if (0===false)
echo "works"; // will not echo anything
¿por qué '0 === falso' no funcionará? También hay una diferencia entre '0 === false' y' 0 === FALSE'? – JavaSa
No hay diferencia entre '0 === false' y' 0 === FALSE'. Ambos falsos evalúan con el mismo valor; para nombres de funciones y palabras clave de lenguaje, PHP es, desagradablemente, insensible a mayúsculas y minúsculas. Ambos "funcionan", pero se evalúan como falsos, porque '===' en realidad realiza una comprobación de valor dependiente del tipo. '==' permite cheques entre tipos; ver la respuesta aceptada en este hilo de cómo PHP determina qué coincide con falso y qué no. – kungphu
PHP utiliza el tipado débil (que llama 'malabarismo tipo'), que es una mala idea (aunque es una conversación para otro momento). Cuando intenta utilizar una variable en un contexto que requiere un valor lógico, se podrá convertir lo que su variable es en un booleano, de acuerdo con algunas reglas sobre todo arbitrarias disponibles aquí: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
Esa "mala idea" es puramente subjetiva: una vez que sabes cómo funciona esto, definitivamente no es un problema, en mi opinión ;-) ;; y las reglas de conversión en su mayoría no me parecen nada lógicas ;-) –
No me hagas publicar una pregunta de stackoverflow sobre qué tan mala idea es una tipificación débil;). Tenga en cuenta que php logra hacer que un silogismo básico falle, porque las conversiones de tipo implícitas hacen que la igualdad php no sea transitiva: echo ("true" == true). "\ N"; // true echo (true == 1). "\ n"; // true echo ("true" == 1). "\ n"; // falso: P – sidereal
Sí ... es un truco (potencialmente) muy peligroso para los nuevos jugadores, pero no necesariamente una mala idea. No voy a defender la solidez del código aquí, pero a veces es un buen atajo. Además, si estás haciendo mucho en el camino del trabajo a mayor escala, probablemente uses métodos de igualdad la mayoría de las veces. – spronkey
pensar operador función que unario: is_false(type value)
cuales 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 ese tipo tenga operador de conversión, lo que convierte el tipo en otro tipo implícitamente, en este caso cadena en booleano.
PHP no expone tales detalles, pero C++ permite la sobrecarga del operador que expone detalles finos de la implementación del operador.
El mejor operador para la comprobación estricta es
if($foo === true){}
De esa manera, en realidad está comprobando si es verdad, y no el 1 o simplemente acaba de establecer.
- 1. cómo funciona el autocargador php
- 2. ¿cómo funciona el encabezado en php?
- 3. ¿Cómo funciona "imagettfbbox()" en PHP?
- 4. ¿Cómo funciona PHP? - Literatura
- 5. ¿Cómo funciona el "correo" de PHP?
- 6. ¿Cómo funciona PHP con Apache?
- 7. ¿Cómo funciona PHP PDO internamente?
- 8. ¿Cómo funciona el operador "&" en una función de PHP?
- 9. PHP no funciona en XAMPP
- 10. mkdir no funciona en PHP
- 11. ¿Cómo funciona realmente el uso de la memoria Apache PHP?
- 12. ¿Funciona realmente el filter_var FILTER_VALIDATE_EMAIL de PHP?
- 13. ¿Cómo funciona la clase PHP IteratorIterator?
- 14. php semáforo no funciona
- 15. PHP taquigrafía no funciona en el nuevo servidor?
- 16. PHP mail() no funciona
- 17. cookie php no funciona
- 18. Sesiones PHP No funciona
- 19. php error_log no funciona
- 20. PHP sleep() no funciona
- 21. ¿Por qué no funciona strip_tags en PHP?
- 22. PHP: archivo de descarga script no funciona en el iPad
- 23. Content-type no funciona en PHP
- 24. PDC's rowCount() No funciona en PHP 5.2.6+
- 25. SQL_CALC_FOUND_ROWS/FOUND_ROWS() no funciona en PHP
- 26. PHP Flush que funciona ... incluso en Nginx
- 27. Nueva línea ("\ n") en PHP no funciona
- 28. PHP Curl no funciona en localhost?
- 29. php: "short_open_tag = On" no funciona
- 30. SublimeLinter: PHP linting no funciona
Es demasiado simplista decir que "verdadero se define como 1 y falso se define como 0". –
por cierto.adivina qué devuelve esto: "falso" == verdadero –