コンテンツにスキップ

ntorelabo

Front End Developer

  • pickup
  • WordPress
  • PHP
    • PHP技術者認定試験
  • Docker
  • Next.js
  • AWS
  • Laravel
  • site map
  • search

ntorelabo

Front End Developer

  • search
  • pickup
  • WordPress
  • PHP
    • PHP技術者認定試験
  • Docker
  • Next.js
  • AWS
  • Laravel
  • site map

【php8上級/準上級試験】模擬問題解説 問題7. 名前空間とグローバル空間 use エイリアス(as)

  • ホームページ
  • 【php8上級/準上級試験】模擬問題解説 問題7. 名前空間とグローバル空間 use エイリアス(as)
  • 2月, 水, 2025
  • PHP
【php8上級/準上級試験】模擬問題解説 問題7. 名前空間とグローバル空間 use エイリアス(as)

Contents [hide]

  • 1 「第1回 PHP 8 上級 模擬試験」を解説していきます
    • 1.1 解説記事一覧
  • 2 模擬問題 7
    • 2.1 名前空間とグローバル空間
    • 2.2 namespaceキーワードより前にクラスを宣言すると、そのクラスはグローバル空間に含まれます
    • 2.3 完全修飾名
    • 2.4 名前空間のベストプラクティス
    • 2.5 名前空間の階層構造
    • 2.6 グローバルの名前空間の参照方法
    • 2.7 基本的な use の使い方
    • 2.8 エイリアス(as)で別名をつける
    • 2.9 useでグループ化された

「第1回 PHP 8 上級 模擬試験」を解説していきます

本記事ではひたすら下記記事の模擬試験の解説をしていきたいと思います!

第1回 PHP 8 上級 模擬試験
https://study.prime-strategy.co.jp/study/ph8ex1/

解説記事一覧

  • PHP8準上級試験 合格のカギ、学習法
  • 【php8上級/準上級試験】模擬問題解説 問題1.~ 3. PHPのインストール abstract staticメソッド 整数オーバーフロー
  • 【php8上級/準上級試験】模擬問題解説 問題4. __construct() __destruct __call() __callStatic()
  • 【php8上級/準上級試験】模擬問題解説 問題5. __toString() 「例外を投げる(throw new \Exception)とは?」 __invoke() __get() __debugInfo()
  • 【php8上級/準上級試験】模擬問題解説 問題6. &参照(リファレンス)unset()
  • 【php8上級/準上級試験】模擬問題解説 問題7. 名前空間とグローバル空間 use エイリアス(as)
  • 【php8上級/準上級試験】模擬問題解説 問題8. error_reporting set_error_handler() 例外捕捉 try catch
  • 【php8上級/準上級試験】模擬問題解説 問題9. interface implements ArrayAccess
  • 【php8上級/準上級試験】模擬問題解説 問題10. SPL RecursiveDirectoryIterator RecursiveIteratorIterator SplFileInfo SplFileObject
  • 【php8上級/準上級試験】模擬問題解説 問題11. $_SERVER $GLOBALS $argv $_COOKIE
  • 【php8上級/準上級試験】模擬問題解説 問題12. list() iterable
  • 【php8上級/準上級試験】模擬問題解説 問題13. 可変変数
  • 【php8上級/準上級試験】模擬問題解説 問題14. クラスの型宣言 Null合体代入演算子(??=)アロー関数
  • 【php8上級/準上級試験】模擬問題解説 問題15. private final nullsafe演算子
  • 【php8上級/準上級試験】模擬問題解説 問題16. if for break
  • 【php8上級/準上級試験】模擬問題解説 問題17. XSS (クロスサイトスクリプティング) htmlspecialchars()
  • 【php8上級/準上級試験】模擬問題解説 問題18. $_FILES
  • 【php8上級/準上級試験】模擬問題解説 問題19. CSRF (Cross-Site Request Forgery) random_bytes()
  • 【php8上級/準上級試験】模擬問題解説 問題20. $_SESSION
  • 【php8上級/準上級試験】模擬問題解説 問題21. ガベージコレクション xdebug_debug_zval()
  • 【php8上級/準上級試験】模擬問題解説 問題22. Directory DirectoryIterator SeekableIterator
  • 【php8上級/準上級試験】模擬問題解説 問題23.mail()
  • 【php8上級/準上級試験】模擬問題解説 問題24. escapeshellarg() escapeshellcmd()
  • 【php8上級/準上級試験】模擬問題解説 問題25 php:// stream_wrapper_register
  • 【php8上級/準上級試験】模擬問題解説 問題26 htmlspecialchars() htmlentities() strpos() tirm()
  • 【php8上級/準上級試験】模擬問題解説 問題27 Phar __HALT_COMPILER()
  • 【php8上級/準上級試験】模擬問題解説 問題28 function_exists()
  • 【php8上級/準上級試験】模擬問題解説 問題29 openssl_encrypt() openssl_decrypt()
  • 【php8上級/準上級試験】模擬問題解説 問題30 strtotime()
  • PHP セッション名の変更方法と php.ini の記述方法まとめ
  • モダンなPHPコードで使用!無名関数の使い方
  • 【PHP】stdClass を使用して(object) でキャスト
  • 【PHP】プロトコル / ラッパーについて(file:// php:// http:// https://)
  • 「PHPでJSONを扱う」json_encodeとjson_decode完全ガイド
  • 【PHP】新しい方の指定方法「nullable」
  • 【PHP】switch分の書き方、PHP 7.3 から PHP7.4の変更点

模擬問題 7

名前空間に関する説明の中で、誤っているものを1つ選びなさい。
なお「\」はバックスラッシュに読み替えること。
また、すべてのコードには下記のコードが適切な箇所に書かれているものとする。

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

名前空間は、namespace キーワードを使って宣言する。
名前空間の宣言は、通常他のコードより前にファイルの先頭で宣言をする必要がある。名前空間の宣言前に書かれたクラスなどは、宣言された名前空間には含まれない。
そのため、以下のコード

class Hoge {
}

namespace Name;

class Foo {
}

$obj = new Hoge();
var_dump($obj);

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

Fatal error: Uncaught Error: Class ‘Name\Hoge’ not found in …
これはHogeがグローバル空間で宣言をされているためなので、以下のコード

class Hoge {
}

namespace Name;

class Foo {
}

$obj = new \Hoge();
var_dump($obj);

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

object(Hoge)#1 (0) {
}

名前空間とグローバル空間

名前空間とは:

  1. ファイルやクラスを整理する仕組み
  2. フォルダ構造をプログラム上で表現する方法

「PHPMailer」の場合:

実際のファイル構造 📁 phpmailer/ └📁 phpmailer/ ├📄 PHPMailer ├📄 SMTP └📄 Exception 名前空間での表現 PHPMailer\PHPMailer\ ├ PHPMailer ├ SMTP └ Exception

namespaceキーワードより前にクラスを宣言すると、そのクラスはグローバル空間に含まれます

⬇️

そのグローバル空間に含まれるHogeクラスを現在の名前空間(この場合は Name\Hoge)からクラスを探そうとするため

⬇️

下記のエラーが発生

Fatal error: Uncaught Error: Class 'Name\Hoge' not found in …
これはHogeがグローバル空間で宣言をされているため

つまり選択肢の文章にあるエラーの内容は正しい内容です

完全修飾名

グローバル空間のクラスを使うには \Hoge のように先頭にバックスラッシュをつけて完全修飾名を指定します

⬇️

よって下記の処理も正しい説明です

$obj = new \Hoge();
var_dump($obj);

// 出力結果
object(Hoge)#1 (0) {
}

名前空間のベストプラクティス

PHP 7以降では、名前空間の宣言は必ずしもファイルの先頭である必要はありません。ただし、ベストプラクティスとしては先頭に書くことが推奨されています

【推奨】 ファイルの先頭 <?php namespace MyProject; class Foo { // … } 【非推奨】 ファイルの先頭 <?php echo “Hello”; namespace MyProject; class Foo { // … }

上記より説明内容は基本的に正確で、PHPの名前空間の動作を適切に説明していると言えますが、一般的なスタイルではないです →❌

名前空間は、namespace キーワードを使って宣言する。
また、名前空間はディレクトリやファイルと同様に、名前空間の階層構造を指定することができる。
そのため、以下のコード

namespace Name\SubName;

class Hoge {
}

$obj = new Hoge();
var_dump($obj);

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

object(Name\SubName\Hoge)#1 (0) {
}

名前空間の階層構造

  1. namespace Name\SubName; という記述によって、Name という名前空間の下にある SubName という階層の名前空間を宣言
  2. オブジェクトを var_dump すると、PHP は 「オブジェクトの完全修飾名」 を表示します。
  3. この例では、Name\SubName\Hoge がクラス名として表示されます。

よって問題の選択肢は⭕正解です

名前空間の定義がない場合、すべてのクラスや関数の定義はグローバル空間に配置される。PHP で定義済みのクラスも、グローバル空間に配置される。
先頭に \ (バックスラッシュ) を付けると、名前空間の内部からであってもグローバル空間の名前を指定することができる。
そのため、以下のコード

namespace Name;

try {
    throw new Exception('error');
} catch (Exception $e) {
    echo 'in to catch';
}

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

Fatal error: Uncaught Error: Class ‘Name\Exception’ not found in …
一方で以下のコード

namespace Name;

try {
    throw new \Exception('error');
} catch (\Exception $e) {
    echo 'in to catch';
}

を実行すると in to catch となる。

グローバルの名前空間の参照方法

PHP がもともと提供しているビルトインクラス(Exception や PDO など)も同様に、グローバル空間に存在します。

ところが、名前空間を定義しているファイル の中で、クラスや関数を 「そのままの名前」(先頭に \ がない状態)で呼び出すと、現在の名前空間内部にあるクラスや関数を探しに行き未定義だよ!とエラーになります

よって問題の選択肢は⭕正解です

PHP でのエイリアス作成には use 演算子を使用する。
use で指定する名前空間付きの名前の、先頭の \ (バックスラッシュ) は不要で、推奨されない。
そのため、以下のコード

namespace Name;

class Hoge {
}

class Foo {
}

namespace Name\Sub;

// よく使われているuse
use Name\Hoge;

$obj = new Hoge();
var_dump(__NAMESPACE__, $obj);

namespace Name\Sub2;

// エイリアスを切ったuse
use \name\Hoge as Bar; // 先頭の \ は推奨されていない

echo PHP_EOL;
$obj = new Bar();
var_dump(__NAMESPACE__, $obj);

namespace Name\Sub3;

// useのグループ化
use Name\{Hoge, Foo};

echo PHP_EOL;
$hoge_obj = new Hoge();
$foo_obj = new Foo();
var_dump(__NAMESPACE__, $hoge_obj, $foo_obj);

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

string(8) "Name\Sub"
object(Name\Hoge)#1 (0) {
}

string(9) "Name\Sub2"
object(Name\Hoge)#2 (0) {
}

string(9) "Name\Sub3"
object(Name\Hoge)#1 (0) {
}
object(Name\Foo)#2 (0) {
}

基本的な use の使い方

use 名前空間\クラス名; と記述することで、現在の名前空間内でクラス名を省略して利用できるようになる。

エイリアス(as)で別名をつける

use 名前空間\クラス名 as 別名;

useでグループ化された

use 親名前空間{クラス1, クラス2};

例: use Name{Hoge, Foo}; → 一括で Name\Hoge と Name\Foo をインポート。

よって選択肢は⭕正解です

php8上級/準上級試験
最近の投稿
  • WordPressサイトのサブディレクトリ→サブドメイン移行手順 2025年7月6日
  • Laravelでリッチテキストエディタで使いやすい画像アップロード機能を実装(TinyMCE) 2025年6月22日
  • 【PHP】出力バッファリング制御 2025年5月22日
  • basic認証のパスワードを忘れた場合 2025年5月14日
  • PHP 8.0〜から実装で便利な機能(名前付き引数、match) 2025年5月11日
  • さくらインターネットからWHOIS登録メールアドレスの利用廃止のメールが来た 2025年5月9日
  • スムーズにスクロールする処理をjQueryで実装 2025年5月5日
  • Gemini for Google Workspace 活用術 2025年4月24日
  • Google Cloud の始め方 2025年4月20日
  • 【PHP】switch分の書き方、PHP 7.3 から PHP7.4の変更点 2025年4月19日
  • 【PHP】新しい方の指定方法「nullable」 2025年3月25日
  • 「PHPでJSONを扱う」json_encodeとjson_decode完全ガイド 2025年3月23日
  • 【WordPress自作テーマ開発】固定ページを自動作成する方法(下層ページ実装) 2025年3月18日
  • 【PHP】プロトコル / ラッパーについて(file:// php:// http:// https://) 2025年3月17日
  • 【PHP】stdClass を使用して(object) でキャスト 2025年3月16日
  • モダンなPHPコードで使用!無名関数の使い方 2025年3月15日
  • Cursor 便利な機能まとめ、Project Rules 2025年3月15日
  • PHP セッション名の変更方法と php.ini の記述方法まとめ 2025年3月12日
  • 【PHP】関数内でグローバル変数を使用するためには global キーワード 2025年3月10日
  • 【php8上級/準上級試験】模擬問題解説 問題30 strtotime() 2025年3月4日
About Us

Ready To Start Work With Us?

Felis consequat magnis est fames sagittis ultrices placerat sodales porttitor quisque.

Get a Quote
recent posts
  • WordPressサイトのサブディレクトリ→サブドメイン移行手順
  • Laravelでリッチテキストエディタで使いやすい画像アップロード機能を実装(TinyMCE)
  • 【PHP】出力バッファリング制御
  • basic認証のパスワードを忘れた場合
  • PHP 8.0〜から実装で便利な機能(名前付き引数、match)
  • さくらインターネットからWHOIS登録メールアドレスの利用廃止のメールが来た
  • スムーズにスクロールする処理をjQueryで実装
  • Gemini for Google Workspace 活用術
Opening Hours
Week Days 10:00 - 17:00
Saturday 10:00 - 15:00
Sunday Day Off
Contact us
popular posts
  • WordPressで画像を拡大表示するなら「Firelight Lightbox」(旧名:Easy Fancybox) 1.1k件のビュー
  • 【WordPress】カスタムフィールド作成の仕方「ACF」Advanced Custom Fieldsの使用法 743件のビュー
  • 【チートシート】Linuc Lv1-102 実務での使用例も解説 612件のビュー
  • My-Snow-Monkey使用例、子テーマによるカスタマイズ 513件のビュー
  • 【WordPressエラー】「Warning: Undefined variable $post in …」「Warning: Attempt to read property “ID” on null in …」 462件のビュー
  • Twitter、Facebookのタイムラインを埋め込む 415件のビュー
  • 【Next.js】ライブラリ使わないでカルーセルスライダー 304件のビュー
  • ローカル、グローバルIPアドレスの違いと確認手順 282件のビュー
  • AWS認定ソリューションアーキテクト-アソシエイトレベル 248件のビュー
  • WordPress自作、カスタマイズ 229件のビュー
Search
Copyright © 2025 ntorelabo | Powered by Desert Themes