Curso gratuito de PHP. Regístrate para hacer un seguimiento de tu progreso →

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 en false, 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:

  1. 0 se convierte en false y 1 se convierte en true
  2. El resultado de false || true es true
  3. Ahora print_r() recibe true, pero solo funciona con cadenas
  4. true se convierte en 1
  5. 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.

Consejos útiles


¿Encontraste un error? ¿Quieres añadir algo? Las solicitudes de extracción son bienvenidas. https://codica.la/errores
Si te encuentras con dificultades y no sabes qué hacer, pregunta en nuestra gran y amigable comunidad