Retorno de valores en funciones PHP

  • Por
Cómo devolver valores en funciones PHP, con la palabra return. Explicamos varias formas de realizarlo con nuevos ejemplos para aprender a trabajar con funciones en PHP.

Para seguir aprendiendo sobre funciones en el Manual de PHP necesitamos abordar con detalle el asunto de la devolución de valores en funciones.

Algo que querrás hacer en PHP, y en la programación en general, es crear funciones que, una vez ejecutadas, nos entreguen un valor como resultado. Es algo muy habitual y que implica varias cuestiones que vamos a abordar en el presente artículo.

Las funciones pueden, o no, retornar valores. Es decir, no es obligado que las funciones retornen valor alguno, solo se trata de una posibilidad, que encontrarás de mucha utilidad en el desarrollo en general. De hecho, nuestros anteriores ejemplos de funciones no habían retornado ningún valor y ya habíamos visto que realizaban tareas bastante útiles.

Palabra "return"

Para retornar valores en funciones se utiliza la palabra "return", indicando a continuación el dato o variable que tienen que retornar.

function suma($valor1, $valor2) {
    return $valor1 + $valor2;
}

La anterior función realiza una operación de suma entre dos valores enviados por parámetro. Para invocarla debemos enviarle los dos valores que debe sumar. Cuando se ejecute la función recibiremos un valor como devolución y podremos hacer cualquier cosa con él. Por ejemplo, en el siguiente código estamos invocando a la función suma, enviando dos valores numéricos y almacenando el valor de devolución en una variable llamada "$resultado".

$resultado = suma(3, 6);

Una función puede perfectamente tener múltiples palabras return en su código. Sin embargo, aunque esto ocurra, debemos tener en cuenta que una función sólo podrá devolver un único valor. Entre otras cosas esto ocurrirá porque, cuando se usa el return, se termina la ejecución de la función devolviendo el dato indicado.

Observa el siguiente código de función. Realiza una operación de división. Recuerda que la operación matemática de dividir algo entre cero no está permitida, ya que el resultado sería "infinito" y ese valor desvordaría a la máquina. Entonces, antes de realizar la operación de división vamos a hacer una comprobación que no se intente dividir entre cero.

function division($valor1, $valor2) {
    if($valor2 == 0) {
        return 'No puedo dividir por cero!!';
    } else {
        return $valor1 / $valor2;
    }
}
Nota: En el código anterior hemos usado la estructura de control "if" que veremos más adelante, en en artículo Control del flujo en PHP: Condiciones IF

Aunque todavía no hemos explicado qué hace un "if", simplemente es una operación condicional. Comprueba una expresión y hace una cosa u otra dependiendo de lo que valga. En resumen, se evalua si $valor2 tiene el dato 0 (cero) y en ese caso se devuelve un mensaje "No puedo dividir por cero!!". En caso que $valor2 no fuera un valor de cero, entonces realiza la operación de división y se devuelve el resultado.

Apreciarás que en el código de la función anterior aparecen dos return, quizás no te resulte extraño, porque solamente uno de ellos se ejecutará, dada la construcción del IF. No obstante, debes saber que un return siempre detiene en ese punto la ejecucion de la función. Es decir, después de ejecutar un return no se ejecutará ninguna otra línea de código siguiente.

Para que quede claro, ahora mira esta otra función.

function cuadrado($valor) {
    return $valor * $valor;
    echo 'Esto nunca se ejecutará!!';
}

Debido al return, el código con la sentencia "echo" nunca se llegará a ejecutar. Así que no aparecerá nunca el mensaje por pantalla, porque el return de la línea anterior parará siempre la ejecución de la función.

Para acabar este punto queremos volver sobre la función anterior llamada "division". Dado lo aprendido de las características del return, aunque nuestro código fuera ligeramente distinto, también tendríamos el mismo resultado. Observa el siguiente código:

function division($valor1, $valor2) {
    if($valor2 == 0) {
        return 'No puedo dividir por cero!!';
    }
    return $valor1 / $valor2;
}

Aunque no hemos usado la construcción "else" (mira más adelante el capítulo donde hablamos de los if) el segundo return solo se ejecutará si $valor2 es distinto de cero, porque si fuera igual a cero se habría salido de la función debido al primer return. Este detalle quizás cuesta un poco de ver al principio de la experiencia como programador, pero es bastante sencillo en realidad. En resumen, puedes confiar que la ejecución de una función siempre se detendrá después de producirse un return.

Ejemplo de función IVA

Vamos a ver un nuevo ejemplo para ilustrar el funcionamiento de una función un poco más avanzada, que utiliza parte de los nuevos conceptos introducidos en este artículo y el anterior sobre paso de parámetros.

Se trata de hacer una función que calcula el IVA y que recibe dos parámetros. Uno el valor sobre el que se calcula y el otro el porcentaje a aplicar. Si no se indica el porcentaje de IVA se entiende que es el 21%.

<html>
<head> 
  	<title>ejemplo IVA</title> 
</head> 

<body> 
<? 
function iva($base,$porcentaje=21){ 
  	return $base * $porcentaje /100; 
} 

echo iva(1000) . "<br>"; 
echo iva(1000,7) . "<br>"; 
echo iva(10,0) . "<br>"; 
?> 

</body> 
</html>

Si se han entendido bien los conceptos, este ejemplo no puede resultar difícil. La función recibe un parámetro llamado $porcentaje con 21 como valor por defecto. Devuelve el porcentaje dado aplicado a la base también indicada por parámetro.

Así pues, en la primera ejecución de la función, como no se indica el porcentaje, se mostrará el 21% de 1000. En la segunda, se muestra el 7% de mil y en la tercera, el 0% de 10.

Retornar múltiples valores en una función

Lo dicho anteriormente sobre que "una función devuelve un único valor" puede resultar cortante para las personas que están comenzando en la programación, al ver que ello puede significar una gran limitación a la hora de escribir funciones. No obstante, con las herramientas con las que se cuenta en la programación ésto no es así.

Si queremos hacer que se puedan devolver varios valores distintos podríamos que recurrir a un truco que consiste en devolver un array.

function numeros_pequenos() 
{   
  return array (0, 1, 2); 
} 
list ($zero, $one, $two) = small_numbers();

Con el array devuelto podremos hacer cualquier cosa. Acceder a sus casillas por separado, recorrerlo, etc. Pero en el código anterior hemos hechado mano de una función incorporada en PHP, nueva para ti, llamada list(). Ésta se usa para asignar una lista de variables en una sola operación. Después de esa operación, $zero valdrá 0, $one valdrá 1 y $two valdrá 2.

Hay que decir que además de arrays, cuando las cosas se complican también podemos devolver objetos y eso nos ayudará a retornar en las funciones todo tipo de estructuras complejas, con varios datos, solo devolviendo un objeto. Más adelante también hablaremos sobre objetos, así que habrá tiempo de ver ejemplos.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

jesus

30/9/2007
¿Las funciones pueden devolver(return) variables de cualquier tipo (texto por ejemplo)?

Christian

11/2/2009
¿Como se pueden obtener los valores que contiene un list()?

Zyos

27/8/2010
Posibilidad de Retorno de Datos
Hola, excelente articulo!!!! funciona a las mil maravilla, me gustaria saber si es posible generar una funcion que genere una consulta en una base de datos de mysql???? y como puedo retornar los valores de esta consulta invocando la funcion creada???? y cual sera el codigo ya que genero la funcion pero no puedo hacer generar el retorno de los datos de la consulta.

Gracias por la ayuda

Bernabe

13/11/2013
Diferencias según la PC
Hola Miguel Angel y quien lea esto.

Hice una aplicación que aplica este concepto de retornar de una función un vector. Trabajando en forma local todo se ve perfecto, pero al subirla al servidor deja de funcionar.
Sé que el problema no está en la aplicación porque probé con el ejemplo simple que expusiste y le sucede lo mismo. El inconveniente está en el retorno de vectores.
Rasqué el php.ini y desinstalé el suhosin que estaba instalado en el servidor, que parece tener restricciones para los arrays pero nada.
¿Tenés idea que puede ser?
En mi PC tengo el Debian Wheezy y php 5.4.4.14. En el servidor un Debian Squeeze con php 5.3.3.7 ¿podrá estar ahí el problema?

Muy claro tu ejemplo. Saludos.

EAPP94

08/4/2015
valores de list
Para obtener los valores de list(), es la siguiente:
foreach(small_numbers as $actual)
echo $actual."<br>";

asi imprimira los valores que tienen las variables de list:
0 //$zero
1 //$one
2 //$two

EAPP94

08/4/2015
componer
foreach(small_numbers() as $actual)