[PHP]関数から複数の値を返す方法

PHP PHP

この記事は、関数を呼び出して、複数の戻り値が欲しい場合のやり方を解説します。

配列で受け渡しをする

関数からの戻り値を配列にして受け取ります。

こちらはPHPの公式の例2にも記載されています。

関数から複数の値を返す

単純に配列で返します。

function small_numbers()
{
    return [0, 1, 2];
}
PHP

複数の値を返す関数から受け取る

受け取る方は、以下のようにします。

// 配列を展開させると、配列のそれぞれのメンバが個別に得られます。
[$zero, $one, $two] = small_numbers();

// PHP 7.1.0 より前のバージョンで上と同じことをするには、
// 言語構造 list を使うしかありません。
list($zero, $one, $two) = small_numbers();
PHP

連想配列で受け渡しをする

関数からの戻り値を連想配列にします。

値が文字列の場合はcompactやextractを使って、少し簡潔に書くこともできるかと思います。

関数から連想配列を返す

function small_numbers()
{
    return ['zero' => 0, 'one' => 1, 'two' => 2];
}
PHP

連想配列を関数から受け取る

$small_numbers = small_numbers();
$zero = $small_numbers['zero'];
$one = $small_numbers['one'];
$two = $small_numbers['two'];
PHP

インスタンスを使う

連想配列での返し方をインスタンスにしただけです。

関数からインスタンスを返す

class SmallNumbers()
{
    public $zero;
    public $one;
    public $two;
}
function small_numbers()
{
    $out = new SmallNumbers();
    $out->zero = 0;
    $out->one = 1;
    $out->two = 2;
    return $out;
}
PHP

インスタンスを関数から受け取る

$small_numbers = small_numbers();
$zero = $small_numbers->zero;
$one = $small_numbers->one;
$two = $small_numbers->two;
PHP

まとめ

そもそも複数の戻り値が返るような設計は間違っていると思うのですが、やむをえない場合は上記から色々試してみてください。

上記の他にもyieldを使ったり参照渡しを使ったりするなど、いくつか方法があるのですが、難しかったり、見通しが悪くなったりするので、割愛しています。

必要になった際に、色々な実装方法があるとだけ覚えていれば、実装時やレビュー時に役に立つと思いおます。

Follow me!

\このブログが役に立ったらサポートお願いします/

Follow me!

PHP
千原 耕司をフォローする

コメント

PAGE TOP
タイトルとURLをコピーしました