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

PHP: Retorno de Valores

Las funciones que definimos en lecciones anteriores terminaban su ejecución imprimiendo algún dato en la pantalla:

<?php

function saludo()
{
    print_r('¡Hola, Hexlet!');
}

Sin embargo, este tipo de funciones no son muy útiles, ya que no podemos usar sus resultados dentro del programa. Para poder hacerlo, necesitamos que las funciones retornen un valor, y eso es lo que aprenderemos en esta lección.

Consideremos el caso del procesamiento de correos electrónicos. Cuando un usuario se registra en un sitio web, puede ingresar su correo electrónico de cualquier manera:

Si almacenamos el correo electrónico en la base de datos en este formato, el usuario no podrá acceder al sitio web si ingresa la dirección sin espacios y en un caso diferente.

Para evitar esto, debemos preparar el correo electrónico para ser almacenado en la base de datos. Esto implica convertirlo a minúsculas y eliminar los espacios en blanco alrededor del texto. Esta tarea se resuelve en un par de líneas:

<?php

function guardarCorreo()
{
    $correo = "  SoPORTE@hexlet.IO";
    // Eliminamos espacios en blanco alrededor
    // La función trim() elimina los espacios en blanco del principio y el final de una cadena
    $correoRecortado = trim($correo);
    $correoPreparado = strtolower($correoRecortado);
    print_r($correoPreparado);
    // Aquí se realizaría el almacenamiento en la base de datos
}

Este código es posible gracias al retorno de valores. Las funciones trim() y strtolower() no imprimen nada en la pantalla. En cambio, devuelven el resultado de su trabajo, lo que nos permite asignarlo a variables.

Si estas funciones imprimieran en la pantalla en lugar de retornar valores, no podríamos asignar el resultado a una variable, tal como no podemos hacer con la función saludo() definida anteriormente:

<?php

$mensaje = saludo();
// Para ver "null", necesitamos usar la función var_dump()
var_dump($mensaje); // => NULL

Modificaremos la función saludo() para que comience a retornar datos en lugar de imprimirlos. Para hacerlo, necesitamos usar la instrucción de retorno en lugar de imprimir en pantalla:

<?php

function saludo()
{
    return '¡Hola, Hexlet!';
}

La instrucción return es especial. Toma la expresión que se encuentra a su derecha y la devuelve al código que llamó a la función. Tan pronto como PHP encuentra return, la ejecución de la función termina:

![Sum-php](assets/sum-php.jpg)

<?php

// Ahora podemos usar el resultado de la función
$mensaje = saludo();
print_r($mensaje); // => '¡Hola, Hexlet!'
// También podemos realizar acciones con el resultado
print_r(strtoupper($mensaje)); // => '¡HOLA, HEXLET!'

Cualquier código después de return no se ejecuta:

<?php

function saludo()
{
    return '¡Hola, Hexlet!';
    print_r('Nunca me ejecutaré');
}

Incluso si una función retorna datos, esto no impide que imprima en pantalla. Además de retornar valores, también podemos imprimir:

<?php

function saludo()
{
    print_r('Apareceré en la consola');
    return '¡Hola, Hexlet!';
}
// Imprimirá el texto en pantalla y retornará el valor
$mensaje = saludo();

No solo podemos retornar un valor específico. Dado que return trabaja con expresiones, prácticamente cualquier cosa puede estar a su derecha. Aquí debemos seguir los principios de legibilidad del código:

<?php

function saludo()
{
    $mensaje = '¡Hola, Hexlet!';
    return $mensaje;
}

Aquí no estamos retornando la variable en sí, siempre estamos retornando el valor que está contenido en esa variable. Aquí tienes un ejemplo con cálculos:

<?php

function dobleCinco()
{
    // o return 5 + 5
    $resultado = 5 + 5;
    return $resultado;
}

Para poner a prueba tus conocimientos, intenta responder esta pregunta. ¿Qué imprimirá este código?

<?php

// Definición
function ejecutar()
{
    // o return 5 + 5
    return 5;
    return 10;
}
// Uso
ejecutar(); // => ?

Tarea

Implementa una función llamada sayHurrayThreeTimes() que retorne la cadena '¡hurray! ¡hurray! ¡hurray!'.

$hurray = sayHurrayThreeTimes();
print_r($hurray); // => '¡hurray! ¡hurray! ¡hurray!'

No es necesario llamar a tu función, solo definirla.
¿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.


¿Encontraste un error? ¿Quieres añadir algo? Las solicitudes de extracción son bienvenidas. https://codica.la/errores
El reactor de código está disponible en la versión principal →