【やさしく解説】PHP8上級試験の模擬問題(14)

PHP
スポンサーリンク

PHP8 上級/準上級試験の認定模擬問題として、プライム・ストラテジー様のPRIME STUDYが認定されているようです。ただ、この模擬問題には解説がありませんので解説をまとめていこうと思います。シリーズ第14回目です。

PHP初級レベルから脱却して中級/上級レベルにいきたい人にピッタリの内容ですね。

PRIME STUDY認定模擬問題のリンクはこちらです → https://study.prime-strategy.co.jp/ 

問題文

PHP 7.3.x から PHP 7.4.x への移行に関する説明の中で、誤っているものを1つ選びなさい。
明記していない限り、実行は PHP 7.4 で行っている。
なお、すべてのコードの先頭には下記のコードが書かれているものとする。

declare(strict_types=1);
error_reporting(-1);

(1)
クラスのプロパティは、新たに型宣言をサポートするようになった。そのため、以下のコード

class Hoge {
  public int $i;
}

$obj = new Hoge();
$obj->i = 'string';


を実行すると、結果は次のとおりとなる。

Fatal error: Uncaught TypeError: Typed property Hoge::$i must be int, string used in …

(2)
アロー関数は、暗黙的な値スコープを持った関数を定義する簡便な文法を提供する。
また、アロー関数は親のスコープで使える変数が常に自動で使える。そのため、以下のコード

$x = 11;
$fn = fn($i) => $i * $x;
var_dump($fn);
var_dump( $fn(9) );


は正しく実行でき、結果は次のとおりとなる。

object(Closure)#1 (1) {
  ["parameter"]=>
  array(1) {
    ["$i"]=>
    string(10) ""
  }
}
int(90)

(3)
Null の場合の代入演算子が追加された。そのため、以下のコード

$array = ['key' => 1];
$array['key'] ??= 'default';
$array['key2'] ??= 'default';
var_dump($array);


は正しく実行でき、結果は次のとおりとなる。

array(2) {
  ["key"]=>
  int(1)
  ["key2"]=>
  string(7) "default"
}

(4)
波括弧を使って配列や文字列のオフセットにアクセスする文法は推奨されなくなった。そのため、以下のコード

$s = 'abc';
var_dump( $s{1} );


を実行すると、結果は次のとおりとなる。

Parse error: syntax error, unexpected '}', expecting ']' in …

解説

選択肢1の解説

正しいです。
PHP 7.4 では、クラスプロパティに型宣言が追加され、型エラーが発生します。$i に string を代入しようとすると、型エラーが発生します。

選択肢2の解説

正しいです。
アロー関数は、外部スコープの変数を自動的に参照します。$x はアロー関数内で使用でき、その値に基づいて計算が行われます。

選択肢3の解説

正しいです。
Null 合体代入演算子(??=)が PHP 7.4 で導入され、変数が null の場合に値が代入されるようになります。ここでは ‘key2′ が null であるため、’default’ が代入されます。

選択肢4の解説

誤りです。PHP 7.4 では {} による配列や文字列のオフセットアクセスは非推奨ですが、まだ動作します。

正解選択肢

以上より選択肢4が正解となります。

コメント

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