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

  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

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

  • Como formatar corretamente um número com os principais zeros em PHP