はじめに
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::test
new Hoge();
→Hoge
クラスのインスタンスが生成される- プロパティが無いため
object(Hoge)#1 (0) { }
が表示される Hoge::test();
の呼び出しによりHoge::test
が出力される
試験対策ポイント
Phar::addFile()
はファイルをアーカイブに追加する- 読み込みは必ず
phar://
スキームを経由する - 実行結果は「インスタンスの var_dump 出力」と「メソッド呼び出し結果」の2点を押さえる
まとめ
Phar に関する問題は「アーカイブの作成」「addFile()
の使い方」「phar://
による読み込み」の3点が頻出です。出力結果を確実にイメージできるようにしておくと試験対策になります。