[PHP]擬似的に多値を受け取る(分配束縛)

phpでは関数は多値を返すことはできないが、配列を返してそれを展開して受け取ることで擬似的に再現できる。
いわゆるdestructuring assignment(分配束縛)というやつ。

配列型の代入にlist関数を使う。配列の一部分のみ受け取ることもできる。

list($a1, $b1, $c1) = [1, 2, 3];
list($a2) = [1, 2, 3];
list($a3,) = [1, 2, 3];
list($a4,,) = [1, 2, 3];
list(,$b5,) = [1, 2, 3];
list(,$b6, $c6) = [1, 2, 3];
list(,, $c7) = [1, 2, 3];

print(var_export($a1,true) . ' , ' . var_export($b1,true) . ' , ' . var_export($c1,true) . PHP_EOL);
print(var_export($a2,true) . PHP_EOL);
print(var_export($a3,true) . PHP_EOL);
print(var_export($a4,true) . PHP_EOL);
print(var_export($b5,true) . PHP_EOL);
print(var_export($b6,true) . ' , ' . var_export($c6,true) . PHP_EOL);
print(var_export($c7,true) . PHP_EOL);

/*
1 , 2 , 3
1
1
1
2
2 , 3
3
*/

php7.1で追加された配列の短縮構文(角括弧, [])を使っても同じことができる。

[$a1, $b1, $c1] = [1, 2, 3];
[$a2] = [1, 2, 3];
[$a3,] = [1, 2, 3];
[$a4,,] = [1, 2, 3];
[,$b5,] = [1, 2, 3];
[,$b6, $c6] = [1, 2, 3];
[,, $c7] = [1, 2, 3];

print(var_export($a1,true) . ' , ' . var_export($b1,true) . ' , ' . var_export($c1,true) . PHP_EOL);
print(var_export($a2,true) . PHP_EOL);
print(var_export($a3,true) . PHP_EOL);
print(var_export($a4,true) . PHP_EOL);
print(var_export($b5,true) . PHP_EOL);
print(var_export($b6,true) . ' , ' . var_export($c6,true) . PHP_EOL);
print(var_export($c7,true) . PHP_EOL);

/*
1 , 2 , 3
1
1
1
2
2 , 3
3
*/

[reference]

帰り値 | PHP.net
list | PHP.net
php7.1 新機能 | PHP.net
恥ずかしながら、golangの多値を返す関数の戻り値を引数に渡した場合の挙動を把握していなかった | podhmo’s diary

この記事が気に入ったらサポートをしてみませんか?