Como criar uma função PHP com múltiplas devoluções

Ralfh Bryan Perez 30 janeiro 2023
  1. PHP array para retornar múltiplos valores
  2. Função PHP com retorno dinâmico condicional
  3. Combinação de PHP Array e Condição Retorno Dinâmico
  4. PHP generator para yield Vários valores
Como criar uma função PHP com múltiplas devoluções

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);

Artigo relacionado - PHP Function