[模擬問題] PHP7初級 – ロジックのグループ:関数とファイル(エバンジェリスト三雲勇二からの出題)

PHP7初級試験 模擬問題 – 出題範囲: ロジックのグループ:関数とファイル からの出題となります。
受験を考えているあなたも、試験を合格したあなたも、ぜひチャレンジしてみてください!

目次

問題

次の選択肢のなかで、正しいものはどれでしょう? (1つ選択)

  1. ユーザー定義関数は func キーワードを使用して宣言する
  2. 関数の引数の前に % をつけるとリファレンス渡しになる
  3. 関数の戻り値を返すときには return を、複数の戻り値を返すときには returns を使用する
  4. 他の PHP スクリプトから関数を再利用する場合には includerequire を使用する
  5. 関数の範囲を超えてグローバル変数を参照するため global の他に、 $GLOBAL[] 配列を使用することもできる

解答と解説は下にスクロールしてください





























解答

正解は 4. です。

解説

1. ユーザー定義関数は func キーワードを使用して宣言する

func ではなく function です。

また、ユーザー定義の関数名は下記のような条件がありますので、間違えないようにしましょう。

  • 1文字目は、アルファベットもしくは _ アンダースコア(数字は使えない)
  • 2文字目以降は、数字、アルファベットもしくは _ アンダースコア
  • 大文字と小文字は区別されない

【試験合格後もステップアップ!】

関数名は大文字と小文字を区別しないのですが、使用する際には宣言されている通り、リファレンスに記載されている通りに関数名を書いておくと混乱がありません。

また、慣例的に関数名など1文字目に _ アンダースコアを使いプライベートな関数名とすることがあります。
ただし、 __ アンダースコア2つから始まる関数名は特別な意味を持つものと定義されているので、ユーザー関数名としては使わないようにしてください。
_() という関数は gettext() 関数のエイリアスなので使用できません。

2. 関数の引数の前に % をつけるとリファレンス渡しになる

引数をリファレンス渡しにするには & を引数前につけます。

引数には、値渡しやリファレンス渡しの他にも、デフォルト引数値を指定する方法もあります。
デフォルト引数値のあとに続く引数はデフォルト引数値である必要があります。

【試験合格後もステップアップ!】

PHP 8.0 から引数にも改良がなされています。
特に大きな改良として名前付き引数がサポートされました。 これにより、引数の順番を気にせず引数を渡すことが可能になります。 本来指定したい引数が後ろの方にあるため、途中の引数を無駄に渡すようなことをしなくて良くなります。

小さな改良点として、最後の引数の後ろに , をつけることもできるようになりました。 これは、配列などの表記に合わせることの他、Git などで不要な差分が出ないようにする表記ができるようになりました。

PHP 8.1 では引数を ... でアンパックしたあとに名前付き引数を指定することもできるようになり、更に柔軟な表記ができるようになりました。

3. 関数の戻り値を返すときには return を、複数の戻り値を返すときには returns を使用する

returns というキーワードはありませんし、複数の戻り値を返すことはできません。

複数の戻り値を返したい場合は、配列などを利用して戻り値を1つに一度まとめる方法が一般的です。

【試験合格後もステップアップ!】

数の戻り値を返すサンプルです。
一度、複数の戻り値を1つの配列に変換し、受け取った側で各変数に振り分けます。
list() 言語構造でも同様のことが可能です。

function swap($a, $b){
return [$b, $a];
}
[$c, $d] = swap(1, 2);
echo $c, ‘, ‘, $d;

4. 他の PHP スクリプトから関数を再利用する場合には includerequire を使用する

選択肢のとおりです。

includerequire の違いは、外部 PHP スクリプトファイルが読み込めなかった場合の違いがあります。
include は外部 PHP スクリプトファイルが読み込めなくても Warning を出力するだけで、スクリプトの実行は継続されます。
require は外部 PHP スクリプトファイルが読み込めない場合には Fatal エラーを出力し、スクリプトの実行は中断します。
また、すでに外部 PHP スクリプトファイルが読み込まれている場合には何もしない、 include_oncerequire_once もあります。

【試験合格後もステップアップ!】

外部 PHP スクリプトファイルを読み込む方法は色々とありますが、下記の順序で考慮していくと良いでしょう。

1. オートローダー
2. require_once
3. include_once
4. require
5. include

5. 関数の範囲を超えてグローバル変数を参照するため global の他に、 $GLOBAL[] 配列を使用することもできる

グローバル変数が格納されている連想配列は $GLOBALS[] です。

関数の外で宣言された変数を関数内で参照したい場合には、関数内で global キーワードを付けて同名の変数を宣言します。
もしくは、 $GLOBALS[] 連想配列のキーに変数名を指定して参照します。

【試験合格後もステップアップ!】

グローバル変数を使用するときには最新の注意をしてください。
グローバル変数を使用するということは、その変数が書き換えられる範囲がプログラム内で広くなってしまうということです。これはプログラムの改修時に考慮する範囲が広くなるということです。
このような状況を避けるため、変数のスコープは最低限にし、関数に渡す値は引数と戻り値を利用して変数の有効範囲を切り分けることが重要です。

PHP 8.1 以降では $GLOBALS[] 連想配列をまとめて書き換える操作がサポート対象外となりました。(このような操作はしないと思いますが)

試験の情報

PHP7初級試験 の詳細およびキャンペーン情報はこちら
https://www.phpexam.jp/summary/novice7/

模擬問題作成及び解説

三雲 勇二
プライム・ストラテジー株式会社 所属。PHP 技術者認定機構で実施している 7 試験 ( PHP8上級 / PHP5上級 / PHP7初級 / PHP5初級 / 徳丸実務 / 徳丸基礎 / KUSANAGI for WordPress ) 含め多数の試験に合格。ペチゾーをデスク周りにおいて日々お仕事しています。
Facebook: facebook.com/yuji.mikumo
Twitter: @maikeru

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次