コンテンツにスキップ

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上級/準上級試験】模擬問題解説 問題1.~ 3. PHPのインストール abstract staticメソッド 整数オーバーフロー

  • ホームページ
  • 【php8上級/準上級試験】模擬問題解説 問題1.~ 3. PHPのインストール abstract staticメソッド 整数オーバーフロー
  • 1月, 金, 2025
  • PHP
【php8上級/準上級試験】模擬問題解説 問題1.~ 3. PHPのインストール abstract staticメソッド 整数オーバーフロー

Contents [hide]

  • 1 「第1回 PHP 8 上級 模擬試験」を解説していきます
    • 1.1 解説記事一覧
  • 2 模擬問題 1
  • 3 模擬問題 1 解説
    • 3.1 PHPのインストールについて
  • 4 模擬問題 2
  • 5 模擬問題 2 解説
    • 5.1 問題文について
    • 5.2 選択肢 1 「整数オーバーフローとビット処理」
    • 5.3 選択肢 4 について
  • 6 模擬問題 3
  • 7 模擬問題 3 解説
    • 7.1 (問題文)バックスラッシュ(\)の使用について
    • 7.2 (選択肢1)「selfとstaticの違い」について
    • 7.3 (選択肢2、3)「staticメソッドとthis」について
    • 7.4 (選択肢4)abstractとは
    • 7.5 「abstract:抽象メソッドの型指定の継承ルール」について

「第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の変更点

模擬問題 1

「PHPをインストールする」にあたっての一般的な注意事項のうち、誤っているものを1つ選びなさい。

PHPの最新のコードは、公式サイト https://www.php.net/ から、Downloads https://www.php.net/downloads に遷移すると、Changelogの確認を含めて取得できる。

PHPの「最新以外の(古い)コード」は、公式サイトでの提供は全くしていない。そのため、古いバージョンのコードが必要な場合、別途「非公式の外部サイト」からソースコードを入手する必要がある。

ダウンロードできるソースコードの拡張子は「.tar.bz2」「.tar.gz」「.tar.xz」等があるが、解凍すれば中身のコードは同じものである。

Downloads https://www.php.net/downloads にはファイル指紋(sha256)がついているので、ダウンロードしたら、改竄の確認をするとよい。

模擬問題 1 解説

PHP公式サイト(https://www.php.net/downloads)では、最新版以外のバージョンもダウンロード可能です。選択肢 2 は誤り❌です

PHPのインストールについて

上記公式サイト以外にもGitHub上のリポジトリからもダウンロード可能です。

https://github.com/php/php-src

模擬問題 2

PHPの変数の型についての記述で、誤っているものを1つ選びなさい。
なお、すべてのコードの先頭には下記のコードが書かれているものとする。

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

下記はマニュアルから一部引用した内容である。

usort ( array &$array , callable $callback ) : bool

整数型 (integer) は整数 ({…, -2, -1, 0, 1, 2, …} という集合) を扱う。
整数のサイズはプラットフォームに依存するが、-2,147,483,648 ~ 2,147,483,647 (32 bit符号付) または -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (64 bit符号付) である事が多い。
integer 型の範囲外の数を指定した場合、float として解釈されるため、用途と環境によっては注意が必要である。

コールバック (callback) は PHP 5.4 以降では callable タイプヒントと呼ばれていた。
これには、あらゆるビルドイン関数、ユーザ定義関数、メソッド、静的なクラスメソッドが指定できるが、言語構造 (例:echo や empty、isset 等) は指定が出来ない。
コールバックに「オブジェクトのメソッド」を指定する場合、 配列の 0 番目の要素にオブジェクトを、 そして 1 番目の要素にメソッド名を指定する必要がある。
静的なクラスメソッドを指定する場合は、配列の 0 番目の要素にクラス名を、1 番目の要素にメソッド名を指定する必要がある。或いは ‘ClassName::methodName’ という形式で指定してもよい。
コールバック (callback) が使われる関数には usort() 関数がある。
そのため、以下のコード

class Hoge {
    public static function sort($a, $b) {
        return $a <=> $b;
    }
}

class Foo {
    public function sort($a, $b) {
        return $a <=> $b;
    }
}

$awk = [3, 1, 2];
usort($awk, [Hoge::class, 'sort']);
var_dump($awk);

$awk = [3, 1, 2];
usort($awk, 'Hoge::sort');
var_dump($awk);

$awk = [3, 1, 2];
usort($awk, [new Foo(), 'sort']);
var_dump($awk);

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

array(3) { 
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

浮動小数点数 (float / double) は、小数を扱う。
浮動小数点数には精度があり、PHP では通常 IEEE 754 倍精度フォーマットが使われる。
浮動小数点数はどうしても誤差を考慮する必要があるため、例えば「小数を直接比較して等しいかどうかを調べてはいけない」という事を理解する必要がある。
そのため、以下のコード

if (0.3 === (0.1 + 0.2)) {
echo “=>ここにはならない”;
} else {
echo “=>こちらになる”;
}
を実行すると、=>こちらになる という結果が返る。

論理型 (boolean) は「真偽値」とも呼ばれ、値は、true か false か null のいずれかになる。
なお、true、false、null の文字は、大文字で書いても小文字で書いてもよい。

模擬問題 2 解説

PHPは動的型付け言語です、そのため「そこまで型を意識しなくてもよい」という特徴があります。
しかし、ここ最近は型に関する知識はプログラミングをする上で重要です。

問題文について

declare(strict_types=1);

  • この設定により、「厳密な型指定モード」が有効になります。
  • 厳密な型指定モードでは、関数やメソッドの引数や戻り値に指定された型に厳密に従う必要があります。たとえば、intが指定されているところにfloatやstringを渡すと、PHPはエラーを発生させます。

error_reporting(-1);

  • すべての種類のエラー(警告や通知を含む)を報告する設定です。デバッグ時に有効で、どんな些細な問題も見逃さずに確認できます。
usort ( array &$array , callable $callback ) : bool

usortは、ユーザー定義の比較関数(コールバック関数)を使用して配列をソートする関数です。

ソートが成功した場合はtrueを返し、エラーが発生した場合はfalseを返します。

選択肢 1 「整数オーバーフローとビット処理」

整数オーバーフローとは、整数型の変数に格納できる最大値を超える値を代入しようとした時に発生する現象です。

32ビットと64ビットシステムの比較 32ビットシステム CPU (32ビットレジスタ) メモリアドレス空間 最大 4GB (2^32 バイト) 0x00000000 – 0xFFFFFFFF 整数の範囲 (符号付き) -2,147,483,648 〜 +2,147,483,647 64ビットシステム CPU (64ビットレジスタ) メモリアドレス空間 理論上 16EB (2^64 バイト) 実用的には数TB〜数百TB 整数の範囲 (符号付き) -9,223,372,036,854,775,808 〜 +9,223,372,036,854,775,807
PHPでの整数オーバーフローと型変換 整数型の範囲 32ビットシステム: -2,147,483,648 〜 +2,147,483,647 64ビットシステム: -9,223,372,036,854,775,808 〜 +9,223,372,036,854,775,807 整数型の範囲を超えると、PHP 7.0以降では float型に変換されます オーバーフロー例 $i = 2147483647; // 最大整数値 (32ビット) $i = $i + 1; // $i は 2147483648 (float型に変換) $i = 9223372036854775807; // 最大整数値 (64ビット) $i = $i + 1; // $i は 9.2233720368548E+18 (float型に変換) 注意: float型は精度が制限されるため、大きな整数値を扱う場合は注意が必要です
整数オーバーフローとビット処理 32ビット整数の表現 0 0000…0000 00000000 00000000 00000111 11101111 符号ビット 上位ビット 下位ビット(例: 2047 = 0x7FF) オーバーフローの例(32ビット) 最大値: 0 1111111 11111111 11111111 11111111 +1すると: 1 0000000 00000000 00000000 00000000 2,147,483,647 (0x7FFFFFFF) + 1 = -2,147,483,648 (0x80000000) PHPでのオーバーフロー処理 PHP 5.x ラップアラウンド(ビット捨て) 2147483647 + 1 = -2147483648 PHP 7.x 以降 float型に自動変換 2147483647 + 1 = 2147483648.0

👉 float型は「整数じゃない数値」=小数や非常に大きい/小さい実数を扱うための型

小数点がある or 科学記号で表現された数

例:3.14, -0.001, 1.2e5(←120000)

選択肢 4 について

boolean型は、値としてtrueまたはfalseのどちらかを持つ型です。
null は boolean 型ではなく、null 型に属します。

よって誤り❌です

模擬問題 3

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

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

三つの特別なキーワード self と parent そして static がクラス定義の内部からプロパティまたはメソッドにアクセスする際に使用される。
そのため、以下のコード

class Hoge {
    public function test_1() {
        echo __METHOD__, PHP_EOL;
    }

    public static function testStatic() {
        echo __METHOD__, PHP_EOL;
    }

    public static function staticCall() {
        self::testStatic();
        static::testStatic();
    }
}

class Foo extends Hoge {
    public function test_1() {
        parent::test_1();
        echo __METHOD__, PHP_EOL;
    }

    public static function testStatic() {
      echo __METHOD__, PHP_EOL;
    }
}

$obj = new Foo();
$obj->test_1();
Foo::staticCall();
を実行すると、結果は次のとおりとなる。

Hoge::test_1
Foo::test_1
Hoge::testStatic
Foo::testStatic

static メソッドはオブジェクトのインスタンスを生成せずにコールするため、疑似変数 $this は、 static として宣言されたメソッドの内部から利用することはできない。
そのため、以下のコード

class Hoge {
    public static function test() {
        var_dump($this);
    }
}

Hoge::test();
を実行すると、結果は次のとおりとなる。

Fatal error: Uncaught Error: Using $this when not in object context in …

static プロパティは、アロー演算子 -> によりオブジェクトからアクセス することはできない。
そのため、以下のコード

class Hoge {
    static $i = 100;

    public function test() {
        echo $this->i;
    }
}

$obj = new Hoge();
$obj->test();
を実行すると、結果は次のとおりとなる。

Notice: Accessing static property Hoge::$i as non static in …
Warning: Undefined property: Hoge::$i in …

抽象クラスから継承する際、親クラスの宣言で abstract としてマークされた全てのメソッドは、子クラスで定義されなければならない。

また、これらのメソッドは同等 (あるいはより緩い制約) の可視性で定義される必要がある。

一方でメソッドのシグネチャ (引数の型と順番) については、必須引数の数は同じである必要があるが、型宣言は異なってもかまわない。

そのため、以下のコード

abstract class Hoge {
    abstract public function __construct(string $s, array $a);
    protected $s;
    protected $a;
}

class Foo extends Hoge {
    public function __construct(string $s, \arrayObject $a) {
        $this->s = $s;
        $this->a = $a;
    }
}

$obj = new Foo(”, new \arrayObject());
var_dump($obj);
は正しく実行でき、結果は次のとおりとなる。

object(Foo)#1 (2) {
[“s”:protected]=>
string(0) “”
[“a”:protected]=>
object(ArrayObject)#2 (1) {
[“storage”:”ArrayObject”:private]=>
array(0) {
}
}
}

模擬問題 3 解説

(問題文)バックスラッシュ(\)の使用について

最初の問題文にあった「「\」はバックスラッシュに読み替えること」とありましたが、そもそもバックスラッシュについて説明します。

ざっくりいうと、他の名前空間のクラスを使う場合に必要です。たとえばPHPMailerを使用する下記の場合ですね。

外部ライブラリのクラス // バックスラッシュ必要 ⚠️ $mailer = new \PHPMailer\PHPMailer\PHPMailer(); ※ 他の名前空間のクラスを使用する場合はバックスラッシュ必須

(選択肢1)「selfとstaticの違い」について

self::は呼び出されたクラスを参照し、static::は実行時のクラスを参照します。

ParentClass ChildClass self:: static:: 常にParentを参照 実行時のクラスを参照

上記より選択肢の内容は⭕です

(選択肢2、3)「staticメソッドとthis」について

static メソッドはオブジェクトのインスタンスを生成せずにコールするため、疑似変数 $this は、 static として宣言されたメソッドの内部から利用することはできない。

class Car static function getInfo() { // $this は使用不可 ❌ return self::$info; } インスタンス化せずに使用するため、 $thisは存在しません

同様の理由でstaticプロパティにはオブジェクト演算子(->)を使ってアクセスできない

上記より選択肢2、3は⭕

(選択肢4)abstractとは

“未完成なメソッド(抽象メソッド)”を含むことで、子クラスに実装を強制できる。「具体的な実装は子クラスで書いてね、でも共通部分はここにまとめるよ!」という考え方。

abstract Animal class Dog extends Animal

「abstract:抽象メソッドの型指定の継承ルール」について

引数型は「広げる」ことができ、戻り値型は「狭める」ことができる。

型指定の継承ルール 引数の型 Parent: mixed Child: int ✅ Child: mixed ❌ より狭い型のみ可能 戻り値の型 Parent: int Child: mixed ✅ Child: int ✅ より広い型が可能

つまり子クラスで引数はきびしく、戻り値は緩くなるということですね!

abstract Animal makeSound(string): string class Dog makeSound(string): string class Cat makeSound($voice): string class Bird makeSound(int): string // ⚠ エラー: 親の引数型と不整合

というのも下記の理由があります

  1. 引数(入力)を厳格に:
  • データの整合性を保証
  • 予期しない入力を防止
  • バグの早期発見
  1. 戻り値(出力)を柔軟に:
  • 拡張性の確保
  • 新機能追加の容易さ
  • オーバーライドの自由度

選択肢4で上記の型指定のルールを確認すると引数の型が「ArrayObjectとarray」で異なっているため誤り❌です

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の使用法 735件のビュー
  • 【チートシート】Linuc Lv1-102 実務での使用例も解説 591件のビュー
  • My-Snow-Monkey使用例、子テーマによるカスタマイズ 511件のビュー
  • 【WordPressエラー】「Warning: Undefined variable $post in …」「Warning: Attempt to read property “ID” on null in …」 447件のビュー
  • Twitter、Facebookのタイムラインを埋め込む 414件のビュー
  • 【Next.js】ライブラリ使わないでカルーセルスライダー 296件のビュー
  • AWS認定ソリューションアーキテクト-アソシエイトレベル 248件のビュー
  • ローカル、グローバルIPアドレスの違いと確認手順 229件のビュー
  • WordPress自作、カスタマイズ 228件のビュー
Search
Copyright © 2025 ntorelabo | Powered by Desert Themes