Cómo crear una función PHP con múltiples retornos
-
PHP
array
para devolver múltiples valores - Función PHP con retorno dinámico condicional
- La combinación del array PHP y la condición de retorno dinámico
-
PHP
generator
parayield
múltiples valores
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);