Cómo crear una función PHP con múltiples retornos

Ralfh Bryan Perez 30 enero 2023
  1. PHP array para devolver múltiples valores
  2. Función PHP con retorno dinámico condicional
  3. La combinación del array PHP y la condición de retorno dinámico
  4. PHP generator para yield múltiples valores
Cómo crear una función PHP con múltiples retornos

Una función PHP es un bloque de declaraciones reutilizable, nos permite tener un retorno siendo una simple cadena, un array o un objeto JSON. Pero no es posible tener más de un retorno. Aunque, se puede usar un array, crear una declaración condicional para retornar una variable dinámica o usar generadores (para PHP 5.5 y superiores).

PHP array para devolver múltiples valores

funtion arrayFunc(){
    $var1 = "return 1";
    $var2 = "return 2";
    
    return array($var1, $var2);
}

En la aplicación:

$result = arrayFunc();
var_dump($result);
//output: array(2) { [0]=> string(8) "return 1" [1]=> string(8) "return 2" }

La función anterior puede tener múltiples retornos en forma de array, se puede acceder a ella utilizando:

$result = arrayFunc();
echo $result[0]; // return 1
echo $result[1]; // return 2

Desde PHP 7.1, hay una nueva función llamada destructuring para las listas. Significa que es posible hacer cosas como:

$array = ['dog', 'cat', 'horse', 'fish'];
[$q, $w, $e, $r] = $array;

echo $q; // output: dog
echo $w; // output: cat

Aplicar en una función se vería así:

function descructingFunction(){
    return ['A', 'sample', 'descructing', 'function'];
}
[$a, $b, $c, $d] = descructingFunction();

echo $a; //output: A
echo $d; // output: function

Función PHP con retorno dinámico condicional

function condFunc($x = true){
    $ret1 = "One";
    $ret2 = "Two";
    
    if($x == true){
        return $ret1;
    }else{
        return $ret2;
    }
}

En la aplicación:

echo condFunc(true);
//output: One

Al tomar este enfoque, no necesita devolver múltiples valores. Por lo tanto, la función se encargará de la condición de filtrar el valor correcto necesario.

La combinación del array PHP y la condición de retorno dinámico

Modificando un poco la función se puede tener la opción de devolver un array o un retorno dinámico.

Ejemplo:

function combination($x = true){
    $ret1 = "One";
    $ret2 = "Two";
    
    if($x === true){
        return $ret2;
    }
    if($x == "both"){
        return array($ret1, $ret2);
    }   
}

echo combination(); //output: Two
var_dump(combination("both")) //output: array(2) { [0]=> string(8) "return 1" [1]=> string(8) "return 2" }

Usar este enfoque permitirá que la función sea más flexible.

PHP generator para yield múltiples valores

Una función generator no devuelve un valor, sino que produce tantos valores como sean necesarios. Devuelve un objeto que puede ser iterado.

Ejemplo:

function multipleValues(){
    yield "return 1";
    yield "return 2";
}

$return = multipleValues();
foreach($return as $ret){
    echo $ret; //$ret first value is "return 1" then "return 2"
}

Nota: La palabra clave de un generator es yield. Actúa como un return a una declaración de función, pero no detiene la ejecución y retorna, sino que proporciona valor a los bucles de código.

Precaución: Cuando se usa yield como expresión, debe estar rodeada de paréntesis.

Ejemplo:

$generator = (yield $test);

Artículo relacionado - PHP Function