0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

◯バージョンによって変化するlist()◯

Last updated at Posted at 2023-04-27

備忘録として投稿。

・PHPのlist()は、配列から値を抽出して変数に代入するための便利な機能である。
ただし、古いバージョンのPHPでは、list()による代入ができるのは配列のインデックスのみであり、連想配列に対しては使用できなかった。

例えば、以下のコードをPHP 5.6以下で実行すると、list()は構文エラーを引き起こす。

$person = array('name' => 'John', 'age' => 30);
list('name' => $name, 'age' => $age) = $person;

・一方、PHP 7以降では、list()が連想配列に対しても使用できるようになった。
したがって、上記のコードはPHP 7以降で正常に動作する。

・また、PHP 7.1からは、list()による代入がnull合体演算子(??)と組み合わせて使用できるようになった。
これにより、以下のように変数にデフォルト値を設定できるようになった。

$person = array('name' => 'John');
list('name' => $name, 'age' => $age) = $person ?? ['age' => 18];

この場合、\$personにageキーが含まれていない場合、$ageにはデフォルト値として18が代入される。

◎余談◎
・PHP 7.0より前のバージョンでは、list()で配列から値を取り出す場合、配列の先頭から順に値を割り当てていく。
例えば、以下のコードを実行すると、変数\$aに2→1の順で格納される。

list($a[], $a[]) = [1, 2];

しかし、PHP 7.0からは、list()で配列から値を取り出す場合、配列の最初から順に値を割り当てるように変更された。
つまり、上記のコードを実行すると、変数\$aに1→2の順で格納されるようになる。

・この変更は、複数の値を返す関数から返された配列をlist()で変数に割り当てる場合に、より自然な動作をするようになるために行われたもの。
ただし、これまでのコードとの互換性が失われるため、注意が必要。

※訂正※
・list()は、関数ではなく言語構造。勘違いしてました。
https://www.php.net/manual/ja/function.list.php
・list()は、PHPバージョン7.0を境に格納する順番が変わります。
https://3v4l.org/CpIoV#v7.0.0

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?