PHP: Tipado débil - 2
Recordemos que PHP es un lenguaje con tipado débil:
- Conoce la existencia de diferentes tipos (números, cadenas, etc.)
- Sin embargo, no es muy estricto en su uso, tratando de convertir la información cuando parece razonable
Se producen muchas conversiones automáticas al trabajar con operaciones lógicas. En PHP hay dos reglas simples para las conversiones:
0
,null
y la cadena vacía''
se convierten enfalse
, por lo que se llaman falsy- Todo lo demás se convierte en
true
Esto también funciona en sentido contrario. Tanto true
como false
se convierten en otros tipos de datos según la situación:
<?php
print_r(true); // => 1
print_r(false); // => (se muestra una cadena vacía en la pantalla)
print_r(0 || 1); // => 1
El operador OR solo funciona con el tipo bool, pero se le dan los números 1
y 0
:
0
se convierte enfalse
y1
se convierte entrue
- El resultado de
false || true
estrue
- Ahora
print_r()
recibetrue
, pero solo funciona con cadenas true
se convierte en1
- Y se muestra
1
en la pantalla
Aquí es importante destacar la diferencia entre los operadores ===
y ==
. La diferencia radica en la conversión de tipos.
La cadena vacía y false
son valores diferentes, por lo que el operador ===
dice "¡Falso! ¡No son iguales!".
Pero el operador ==
convierte los tipos. Desde su punto de vista, la cadena vacía y false
son iguales. Esta conversión es implícita, por lo que se recomienda evitar los operadores ==
y !=
siempre que sea posible:
<?php
var_dump('' === false); // => false
var_dump('' == false); // => true
Recordemos la operación de negación. Con una doble negación !!
, el valor final es igual al valor inicial:
<?php
$respuesta = true;
var_dump(!$respuesta); // => false
var_dump(!!$respuesta); // => true
Aquí también se producen conversiones de tipo adicionales. Por lo tanto, el resultado de una doble negación siempre será de tipo bool. Se utiliza este truco para cambiar el tipo de datos.
En diferentes lenguajes de programación, hay diferentes reglas de conversión. Algunos lenguajes no realizan conversiones de tipos por sí mismos.
Tarea
Escribe una función isFalsy()
que verifique si el valor pasado se interpreta como falso en PHP. Para realizar esta verificación, deberás comparar false
con el valor pasado utilizando ==
.
<?php
isFalsy(false); // true
isFalsy(0); // true
isFalsy('ayuda'); // false
isFalsy(10); // false
¿El ejercicio no pasa la prueba, qué debo hacer? 😶
Si te quedaste atascado, es el momento perfecto para hacer una pregunta en las "Discusiones".
* Asegúrate de incluir la salida de las pruebas. Sin ella, es casi imposible entender qué está mal, incluso si muestras tu código. Los programadores tienen dificultades para ejecutar el código en su mente, pero casi siempre es posible entender a dónde mirar a partir del error que recibiste.
Mi código funciona en mi entorno, pero no aquí 🤨
Las pruebas están diseñadas de manera que verifican la solución de diferentes maneras y con diferentes datos. A menudo, una solución funciona con ciertos datos de entrada pero no con otros. Para entender este punto, revisa la pestaña "Pruebas" y presta atención a los mensajes de error, que suelen contener pistas.
Mi código es diferente a la solución del profesor 🤔
Esto es normal 🙆. En programación, una tarea puede tener muchas soluciones diferentes. Si tu código pasa la prueba, cumple con los requisitos de la tarea.
En raras ocasiones, la solución puede estar ajustada para pasar las pruebas, pero esto suele ser evidente.
Leí la lección, pero no entendí nada 🙄
Crear materiales de aprendizaje comprensibles para todos es bastante difícil. Hacemos nuestro mejor esfuerzo, pero siempre hay margen para mejorar. Si encuentras material que no entiendes, describe el problema en las "Discusiones". Es ideal si puedes formular los aspectos que no entiendes en forma de preguntas. Por lo general, necesitamos unos días para hacer mejoras.
Por cierto, tú también puedes contribuir a mejorar los cursos: en la parte inferior hay un enlace al código fuente de las lecciones, que se puede modificar directamente en el navegador.