Как создать PHP-функцию с множественными возвратами

  1. PHP массив для возврата нескольких значений
  2. Функция PHP с условным динамическим возвратом
  3. Комбинация массива PHP и динамического возврата условия
  4. PHP generator к yield множественным значениям

Функция PHP - это многократно используемый блок операторов, который позволяет нам иметь возврат, будучи простой строкой, массивом или JSON-объектом. Но нельзя иметь более одного возврата. Хотя вы можете использовать массив, создавать условный оператор для возврата динамической переменной или использовать генераторы (для PHP 5.5 и выше)..

PHP массив для возврата нескольких значений

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

В применении:

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

Функция выше может иметь несколько возвратов в виде массива, доступ к которому можно получить с помощью:

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

Начиная с версии PHP 7.1, появилась новая функция destructuring для списков. Это означает, что можно делать такие вещи:

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

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

Применение в функции будет выглядеть следующим образом:

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

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

Функция PHP с условным динамическим возвратом

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

В применении:

echo condFunc(true);
//output: One

При таком подходе нет необходимости возвращать несколько значений. Следовательно, функция будет обрабатывать условие для фильтрации нужного значения.

Комбинация массива PHP и динамического возврата условия

Немного изменив функцию, можно иметь возможность возврата массива или динамического возврата.

Пример:

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" }

Использование такого подхода позволит сделать функцию более гибкой.

PHP generator к yield множественным значениям

Функция генератор не возвращает значение, она показывает столько значений, сколько необходимо. Она возвращает объект, который может быть итераризован.

Пример:

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"
}

Note: Ключевым словом к генератору является yield. Она действует как return к оператору функции, но не останавливает выполнение и не возвращает, а предоставляет значение в цикле кода.

Внимание: При использовании yield в качестве выражения, оно должно быть окружено круглыми скобками.

Пример:

$generator = (yield $test);
comments powered by Disqus