ウェブデザイン技能検定の過去問では、PHPのlist()
関数に関する問題が出題されました。
PHP全体となるとすべてを解説するのが困難になってしまうので、過去問の形に添った内容の部分で理解を深め、他にも似たような例がないかなどを考えてみます。
過去問題文は次の通りです。
問題: 次のPHPのコードを実行した場合の変数 $a
の値について、PHP5では1、PHP7では2となる。
list($a, $b) = [1, 2];
回答: 間違い
list()
関数の基本動作
まず、list()
関数の基本的な動作について説明します。list()
関数は、配列の値を変数に代入するためのPHPの組み込み関数です。
以下のコードは、リスト構文を使用して配列の値を変数 $a
と $b
に代入しています。
list($a, $b) = [1, 2];
この動作は、PHP5でもPHP7でも同じです。
$a
に 1 が代入される。$b
に 2 が代入される。
つまり、どちらのバージョンでも $a
には1が、$b
には2が代入されます。
以下の順番が変わってしまう例をなどを見てみましょう。
順番が変わるケース
実際に、PHP5とPHP7で順番が変わるケースとして考えられるのは次のような形です。
配列のインデックス付き代入
list($a, $b) = array(1 => 1, 0 => 2);
このコードの動作は、PHP5とPHP7で異なります。
PHP5の動作:
list($a, $b) = array(1 => 1, 0 => 2);
echo $a; // 出力: 2
echo $b; // 出力: 1
PHP7の動作:
list($a, $b) = array(1 => 1, 0 => 2);
echo $a; // 出力: 1
echo $b; // 出力: 2
PHP5では、配列のインデックスに関係なく最初の要素から順に代入されますが、PHP7では配列のインデックスが順序に影響します。
インデックス付き変数への代入
list($a[], $a[], $a[]) = [1, 2, 3];
print_r($a);
このコードの動作も、PHP5とPHP7で異なります。
PHP5の動作:
list($a[], $a[], $a[]) = [1, 2, 3];
print_r($a);
// 出力: Array ( [0] => 1 [1] => 2 [2] => 3 )
PHP7の動作:
list($a[], $a[], $a[]) = [1, 2, 3];
print_r($a);
// 出力: Array ( [0] => 3 )
PHP5では、各要素が順に配列に追加されますが、PHP7では最後の要素だけが追加されます。
まとめ
list()
関数は、配列の要素を変数に代入するための構文です。- PHP5とPHP7の両方で、
list($a, $b) = [1, 2];
は$a
が1、$b
が2となります。 - PHP5とPHP7で順番が変わるケースは、配列のインデックス付き代入やインデックス付き変数への代入の場合です。
以上のポイントを押さえて、PHPのlist()
関数の動作について理解を深めましょう。
過去問に沿ってみてきましたが、PHPの基礎だけでもすごく範囲が広くなってしまいます。
今回の過去問などから問題の傾向を理解し、そのうえでPHPを理解してみるのもよいかもしれません。