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

PHP
スポンサーリンク

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

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

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

問題文

定義済の変数 に関する説明の中で、誤っているものを1つ選びなさい。
なお、すべてのコードの先頭には下記のコードが書かれているものとする。

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

(1)
$_SERVER は、ヘッダ、パス、スクリプトの位置のような 情報を有する配列である。
この配列のエントリは Web サーバーにより生成されるため、PHP をコマンドラインで実行している場合には、使用できないものもある。
そのため、以下のコード

var_dump( $_SERVER['REMOTE_ADDR'] );


を Web サーバ経由で実行した場合は現在ページをみているユーザーの IP アドレスが出力されるが、コマンドラインから実行した場合は次のような結果となる。

Warning: Undefined array key "REMOTE_ADDR" in …
NULL

(2)
$GLOBALS はグローバルスコープで使用可能なすべての変数への参照である。変数名が配列のキーとなる。そのため、以下のコード

function hoge() {
  var_dump( $GLOBALS['i'] );
}

$i = 999;
hoge();


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

int(999)

(3)
$argv はスクリプトに渡された引数の配列である。
$argv[0] はスクリプトの実行に使う名前となり、$argv[1] 以降に引数の配列が入る。そのため、

var_dump( $argv[1], $argv[2] );


上記のコードを

php sample.php aaa "bb cc dd" 999


のように呼び出すと、結果は次のとおりとなる。

string(3) "aaa"
string(8) "bb cc dd"

(4)
$_COOKIE は現在のスクリプトに HTTP クッキーから渡された変数の連想配列である。
Cookie から渡された値は $_COOKIE に入り、また $_COOKIE に設定した値は Cookie として設定される。そのため、以下のコード

$_COOKIE['i'] = ($_COOKIE['i'] ?? 0) + 1;
var_dump($_COOKIE['i']);


をブラウザから呼び出すと、1回目の結果は次のとおりとなる。

int(1)


2回目の結果は次のとおりとなる。

int(2)


3回目の結果は次のとおりとなる。

int(3)

解説

選択肢1の解説

正しいです。
$_SERVER は、サーバーや実行中のスクリプトに関する情報を持つ「スーパーグローバル変数」 です。PHPには、どこからでもアクセスできる特別な変数(配列)がいくつかあります。$_GET, $_POST, $_SESSION, $_SERVER などがあり、$_SERVER には サーバー情報 や 現在のスクリプトに関するデータ が格納されています。

REMOTE_ADDR は「Webサーバーがリクエストを受けたときのクライアントのIP」を示すため、CLI環境(コマンドライン)からは利用できません。

選択肢2の解説

正しいです。

$GLOBALS は、すべてのグローバル変数にアクセスできる特別な配列(スーパーグローバル変数) です。通常、関数の中から グローバル変数には直接アクセスできませんが、$GLOBALS を使うと、関数内からでもグローバル変数を操作できる ようになります。

PHPには、どこからでもアクセスできる特別な変数(配列)があります。$_GET、$_POST、$_SERVER、$GLOBALS などがあり、$GLOBALS は グローバルスコープのすべての変数を格納する連想配列 です。

GLOBALS[‘変数名’] という書き方で、関数の中からグローバル変数にアクセスできます。

(1~3行目)$GLOBALS[‘i’]を表示する関数hoge()を定義しています。ここでグローバル変数 $i にアクセスし、値を表示します。
(5行目)$i = 999; で変数 $i に 999 を代入します。通常、スコープの問題で関数の中から $i に直接アクセスできません。
(6行目)hoge() を実行します。hoge() 内で $GLOBALS[‘i’] を参照し、グローバル変数 $i の値を出力します。

選択肢3の解説

正しいです。
$argv は、スクリプトに渡されたコマンドライン引数を格納する配列であり、$argv[0] はスクリプト名、$argv[1] 以降が引数となります。指定されたコードも正しい結果を返します。

選択肢4の解説

誤っています。
$_COOKIE に代入しても、ブラウザに即座に反映されるわけではなく、クッキーを設定するには setcookie() 関数を使う必要があります。

正解選択肢

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

コメント

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