はじめに
PHP8上級試験では、Phar(PHP Archive)に関する出題が見られます。特に Phar クラスを用いたアーカイブ作成と、addFile() を使ったファイル追加、さらに phar:// スキームを介した読み込み挙動を理解しておくことは重要です。本記事では、試験問題集に出てきたコード例をベースに、Pharアーカイブの作成からクラス利用までの流れを整理します。
目次
Pharアーカイブに格納→実行フロー図
┌─────────────┐
│ Hoge.php │ ← 元のクラス定義ファイル
└──────┬──────┘
│ addFile()
v
┌─────────────┐
│ exam.phar │ ← Pharアーカイブに格納
│ (Hoge.php)│
└──────┬──────┘
│ require phar://
v
┌─────────────┐
│ 実行 │
│ object(Hoge) │
│ Hoge::test │
└─────────────┘アーカイブ追加対象ファイル
まずはアーカイブに追加する対象となる Hoge.php ファイルの中身です。
<?php
declare(strict_types=1);
error_reporting(-1);
class Hoge {
public static function test() {
echo __METHOD__, "\n";
}
}このファイルは、単純に Hoge クラスを定義し、test() メソッドを呼び出すとHoge::test という文字列を出力する仕組みになっています。
Pharアーカイブの作成
次に、Hoge.php を Phar アーカイブへ追加します。
<?php
declare(strict_types=1);
error_reporting(-1);
$phar = new Phar(__DIR__ . '/exam.phar');
$phar->addFile(__DIR__ . '/Hoge.php', 'Hoge.php');ポイントは addFile(実ファイルのパス, アーカイブ内のパス) です。これにより exam.phar 内に Hoge.php が格納されます。
アーカイブ内のファイルを読み込む
作成した Phar からファイルを利用するには phar:// スキームを指定します。
<?php
declare(strict_types=1);
error_reporting(-1);
require_once('phar://exam.phar/Hoge.php');
$obj = new Hoge();
var_dump($obj);
Hoge::test();実行結果
一時的に Phar アーカイブを作りたいだけなら:
php -d phar.readonly=0 xxxx.php上記のコードを実行すると、以下の出力になります。
object(Hoge)#1 (0) {
}
Hoge::testnew Hoge();→Hogeクラスのインスタンスが生成される- プロパティが無いため
object(Hoge)#1 (0) { }が表示される Hoge::test();の呼び出しによりHoge::testが出力される
試験対策ポイント
Phar::addFile()はファイルをアーカイブに追加する- 読み込みは必ず
phar://スキームを経由する - 実行結果は「インスタンスの var_dump 出力」と「メソッド呼び出し結果」の2点を押さえる
まとめ
Phar に関する問題は「アーカイブの作成」「addFile() の使い方」「phar:// による読み込み」の3点が頻出です。出力結果を確実にイメージできるようにしておくと試験対策になります。
