複数の戻り値を持つ PHP 関数を作成する方法

  1. 複数の値を返す PHP の「配列」
  2. 条件付きダイナミックリターンでの PHP 関数
  3. PHP 配列と条件動的戻りの組み合わせ
  4. 複数の値を yield する PHP の generator

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 以降、リストの「破壊」と呼ばれる新しい関数があります。つまり、次のようなことが可能です。

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

このアプローチを使用すると、関数をより柔軟にすることができます。

複数の値を yield する PHP の generator

generator 関数は値を返さず、必要な数の値を生成します。繰り返し可能なオブジェクトを返します。

例:

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

注:generator のキーワードは yield です。関数ステートメントへの return のように機能しますが、実行を停止して戻るのではなく、コードループに値を提供します。

注意: yield を式として使用する場合は、括弧で囲む必要があります。

例:

$generator = (yield $test);

関連記事 - PHP Function

  • PHP で先行ゼロ付きの数値を適切にフォーマットする方法
  • comments powered by Disqus