Como criar uma função PHP com múltiplas devoluções
-
PHP
array
para retornar múltiplos valores - Função PHP com retorno dinâmico condicional
- Combinação de PHP Array e Condição Retorno Dinâmico
-
PHP
generator
parayield
Vários valores
Uma função PHP é um bloco reutilizável de declarações, ela nos permite ter um retorno sendo um simples string, array ou um objeto JSON. Mas não é possível ter mais de um retorno. Embora, você possa usar um array, criar uma declaração condicional para retornar uma variável dinâmica ou usar geradores (para PHP 5.5 e superior).
PHP array
para retornar múltiplos valores
funtion arrayFunc(){
$var1 = "return 1";
$var2 = "return 2";
return array($var1, $var2);
}
Em aplicação:
$result = arrayFunc();
var_dump($result);
//output: array(2) { [0]=> string(8) "return 1" [1]=> string(8) "return 2" }
A função acima pode ter retornos múltiplos na forma de um array, pode ser acessada usando:
$result = arrayFunc();
echo $result[0]; // return 1
echo $result[1]; // return 2
Desde o PHP 7.1, há uma nova função chamada destructuring
para listas. Isso significa que é possível fazer coisas como:
$array = ['dog', 'cat', 'horse', 'fish'];
[$q, $w, $e, $r] = $array;
echo $q; // output: dog
echo $w; // output: cat
Aplicar em uma função seria parecido com isto:
function descructingFunction(){
return ['A', 'sample', 'descructing', 'function'];
}
[$a, $b, $c, $d] = descructingFunction();
echo $a; //output: A
echo $d; // output: function
Função PHP com retorno dinâmico condicional
function condFunc($x = true){
$ret1 = "One";
$ret2 = "Two";
if($x == true){
return $ret1;
}else{
return $ret2;
}
}
Em aplicação:
echo condFunc(true);
//output: One
Ao adotar esta abordagem, não é necessário retornar múltiplos valores. Assim, a função tratará da condição para filtrar o valor correto necessário.
Combinação de PHP Array e Condição Retorno Dinâmico
Modificar um pouco a função pode ter a opção de retornar uma array ou um retorno dinâmico.
Exemplo:
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" }
A utilização desta abordagem permitirá que a função seja mais flexível.
PHP generator
para yield
Vários valores
A função generator
não retorna um valor, mas produz tantos valores quantos forem necessários. Ela retorna um objeto que pode ser iterado.
Exemplo:
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: A palavra-chave de um generator
é yield
. Ela age como um return
a uma declaração de função, mas não pára a execução e retorna, ela fornece valor aos loops do código.
Cuidado: Ao utilizar o yield
como expressão, ele deve ser cercado por parênteses.
Exemplo:
$generator = (yield $test);