← certdrill.dev トップ

PHPクイズ

収録問題 20問 / 10問ランダム出題

基本文法 型と配列 関数と例外 Composer Webセキュリティ
PHPの10問クイズに挑戦

ランダムに出題・即時フィードバック・間違えた問題の復習機能付き

クイズをはじめる →

収録テーマ一覧(全20問)

Q1

PHPで、リクエストごとに読み込む設定ファイルの中で、存在しないキーを参照したときの警告を避けつつ既定値を使いたい。最も自然な書き方はどれですか?

答え:$config['timezone'] ?? 'UTC'

null合体演算子 ?? は、左辺が存在しない、またはnullの場合に右辺を返します。配列キーが存在しない可能性がある設定値の既定値指定に向いています。

Q2

フォーム入力をHTMLへ表示するPHPテンプレートで、XSSを避けるために最も基本となる処理はどれですか?

答え:出力時に htmlspecialchars でHTMLエスケープする

HTML文脈へユーザー入力を出すときは、出力時エスケープが基本です。htmlspecialchars はHTML特殊文字をエンティティへ変換します。

Q3

PHPファイルで関数の引数型を厳密に扱いたい。ファイル先頭に置く宣言として適切なのはどれですか?

答え:declare(strict_types=1);

declare(strict_types=1); は、そのファイルから呼び出す関数のスカラー型変換を厳格にします。既存コードとの境界では影響範囲を意識します。

Q4

PHPの名前空間つきクラス App\Service\Mailer を短い名前 Mailer で使いたい。適切なのはどれですか?

答え:use App\Service\Mailer;

use は名前空間つきクラスや関数などをインポートし、短い名前で参照するために使います。

Q5

APIレスポンスを連想配列として扱いたい。json_decode の呼び出しとして適切なのはどれですか?

答え:json_decode($json, true)

json_decode($json, true) はJSONオブジェクトを連想配列として返します。falseや省略時は標準オブジェクトとして扱われます。

Q6

PHPの配列で、ユーザーIDをキー、ユーザー名を値として保持したい。最も適切なデータ構造はどれですか?

答え:連想配列

PHPの配列は順序付きマップとして使えます。IDをキーにして値を引く用途では連想配列が自然です。

Q7

関数が文字列またはnullを返す可能性を型宣言で表したい。PHP 8系で自然な戻り値型はどれですか?

答え:?string

?stringstring|null と同じ意味のnullable型です。値を返さない void とは混ぜません。

Q8

大量データを1件ずつ処理し、全件をメモリに載せたくない。PHPで候補になる仕組みはどれですか?

答え:Generator と yield

Generatorは値を逐次生成できるため、大きな配列を作らずに反復処理したい場面で役立ちます。

Q9

PHP 8で、内部関数へ不正な型を渡したときに捕捉を考えるべき例外として適切なのはどれですか?

答え:TypeError

PHP 8では型に合わない引数で TypeError が投げられる場面があります。値の範囲が不正な場合は ValueError も考慮します。

Q10

例外が発生してもファイルハンドルを閉じるなどの後始末を必ず行いたい。使う構文として適切なのはどれですか?

答え:try / catch / finally

finally ブロックは例外の有無にかかわらず実行されるため、リソース解放などに向いています。

Q11

関数の引数にデフォルト値を設定する目的として適切なのはどれですか?

答え:省略時の動作を明示し、呼び出し側の記述を簡潔にする

デフォルト引数は、よく使う既定動作を関数定義に表現するために使います。セキュリティや例外処理の代替ではありません。

Q12

コールバックを受け取る関数で、型宣言として意図が伝わりやすいものはどれですか?

答え:callable

callable は関数名、クロージャ、メソッド参照など、呼び出し可能な値を受け取る意図を示せます。

Q13

Composerで、プロジェクトが依存するパッケージとバージョン制約を記録する主なファイルはどれですか?

答え:composer.json

composer.json は依存パッケージ、autoload設定、スクリプトなどのプロジェクト定義を持ちます。

Q14

CIや本番デプロイで、composer.lock に固定されたバージョンをそのまま入れたい。適切なコマンドはどれですか?

答え:composer install

composer install はlockファイルがある場合、その内容に従って依存関係をインストールします。update は依存解決を更新します。

Q15

PSR-4 autoloadで App\ 名前空間を src/ に対応させたい。設定する場所はどれですか?

答え:composer.json の autoload

ComposerのPSR-4 autoloadは composer.jsonautoload セクションで定義し、必要に応じて composer dump-autoload で再生成します。

Q16

本番イメージに開発用ツールを入れたくない。Composer install時の代表的な指定はどれですか?

答え:composer install --no-dev

--no-devrequire-dev の依存をインストール対象から外します。本番ビルドのサイズや攻撃面を抑えるために使います。

Q17

ユーザー入力を使ってSQLを実行するPHPアプリで、SQLインジェクション対策として基本になるものはどれですか?

答え:PDOのプリペアドステートメントとバインド値を使う

SQLではプレースホルダとバインド値を使い、SQL構造とデータを分離するのが基本です。HTMLエスケープはHTML出力用です。

Q18

PHPでパスワードを保存する際に最も基本となるAPIの組み合わせはどれですか?

答え:password_hash / password_verify

password_hash は安全なパスワードハッシュを生成し、password_verify は入力パスワードとハッシュを検証します。

Q19

セッション固定攻撃への基本対策として、ログイン成功直後に行うべき処理はどれですか?

答え:session_regenerate_id(true) を実行する

ログインなど権限状態が変わるタイミングでセッションIDを再生成すると、固定されたIDの悪用リスクを下げられます。

Q20

ファイルアップロード機能で、ユーザーが送った元ファイル名をそのまま保存名に使うリスクはどれですか?

答え:パストラバーサルや上書き、危険な拡張子の混入につながる可能性がある

アップロードでは保存名の生成、拡張子やMIMEの検証、保存先の分離、公開可否の制御などを考える必要があります。

certdrill.dev は、LPI Japan・IPA・AWS・Microsoft Azure その他各試験団体と一切関係のない独立した非公式学習サイトです。問題・解説はオリジナルコンテンツです。