【PHP8.x】__constructメソッドの使い方

__constructメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

__constructメソッドは、新しいfinfoオブジェクトを生成し、初期化を実行するメソッドです。これはクラスのコンストラクタとして機能し、new finfo()のようにインスタンスを生成する際に自動的に呼び出されます。このメソッドの主な役割は、ファイルの種類を特定するために参照される「magicデータベース」と呼ばれる定義ファイルを読み込むことです。第一引数には、ファイル情報の取得方法を制御するための定数を指定します。例えば、FILEINFO_MIME_TYPEを指定すると、ファイルの内容から「text/plain」や「image/jpeg」といったMIMEタイプを取得できるようになります。デフォルト値はFILEINFO_NONEです。第二引数には、使用するmagicデータベースのファイルパスを任意で指定できます。この引数を省略した場合、PHPが標準で用意しているデータベースが自動的に使用されるため、通常は指定する必要はありません。このメソッドによって適切に初期化されたfinfoオブジェクトを用いて、file()メソッドやbuffer()メソッドを呼び出し、具体的なファイル情報を取得します。

構文(syntax)

1finfo::__construct(int $flags = FILEINFO_NONE, ?string $magic_database = null)

引数(parameters)

int $flags = FILEINFO_NONE, ?string $magic_database = null

  • int $flags = FILEINFO_NONE: ファイル情報の取得方法を指定するフラグ。デフォルトは FILEINFO_NONE。
  • ?string $magic_database = null: ファイルタイプを判定するためのマジックデータベースファイルのパス。指定しない場合はデフォルトのマジックデータベースが使用される。

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP 8 コンストラクタプロパティ昇格で設定する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * finfo::__construct のシグネチャを模倣し、
7 * コンストラクタのプロパティ昇格機能を使ってプロパティを初期化するクラス
8 */
9class FileInfoConfig
10{
11    /**
12     * コンストラクタの引数に可視性修飾子 (public) を付けることで、
13     * プロパティの宣言と初期化を同時に行います。
14     * これが「コンストラクタのプロパティ昇格 (Constructor Property Promotion)」です。
15     *
16     * @param int $flags FILEINFO_* 定数のいずれか
17     * @param ?string $magicDatabase magicデータベースファイルへのパス、またはnull
18     */
19    public function __construct(
20        public int $flags = FILEINFO_NONE,
21        public ?string $magicDatabase = null
22    ) {
23        // PHP 8以前では、以下のような記述が必要でした。
24        //
25        // private int $flags;
26        // private ?string $magicDatabase;
27        //
28        // public function __construct(int $flags, ?string $magicDatabase)
29        // {
30        //     $this->flags = $flags;
31        //     $this->magicDatabase = $magicDatabase;
32        // }
33    }
34
35    /**
36     * 設定情報を表示します。
37     */
38    public function display(): void
39    {
40        echo "Flags: " . $this->flags . PHP_EOL;
41        echo "Magic Database: " . ($this->magicDatabase ?? 'N/A') . PHP_EOL;
42    }
43}
44
45// 引数を指定せずにインスタンスを作成(デフォルト値が使用される)
46$config1 = new FileInfoConfig();
47echo "--- Config 1 ---" . PHP_EOL;
48$config1->display();
49
50echo PHP_EOL;
51
52// すべての引数を指定してインスタンスを作成
53$config2 = new FileInfoConfig(FILEINFO_MIME_TYPE, '/usr/share/misc/magic');
54echo "--- Config 2 ---" . PHP_EOL;
55$config2->display();

このPHP 8のサンプルコードは、FileInfoConfigというクラスを定義し、PHP 8の新機能である「コンストラクタのプロパティ昇格」を解説するものです。このクラスは、ファイル情報を扱うfinfoクラスのコンストラクタの仕様を参考に作られています。

__constructメソッドは、newキーワードでクラスのインスタンスを生成する際に自動的に実行される特別なメソッドです。このコードの最大の特徴は、コンストラクタの引数$flags$magicDatabaseの前にpublicというキーワードが付いている点です。これがコンストラクタのプロパティ昇格機能であり、プロパティの宣言と、引数で受け取った値による初期化を同時に行います。これにより、従来は別途必要だったプロパティ宣言とコンストラクタ内での代入処理を省略でき、コードが非常に簡潔になります。

引数$flagsは動作を制御する整数値、$magicDatabaseは設定ファイルへのパスを示す文字列またはnullを受け取ります。どちらもデフォルト値が設定されているため、インスタンス生成時に引数を省略できます。コードの後半では、引数を省略してデフォルト値でインスタンスを生成する例と、具体的な値を指定して生成する例を示し、それぞれのプロパティに値が正しく設定されていることを確認しています。

このコードで使われている「コンストラクタのプロパティ昇格」は、PHP 8.0から導入された新機能です。古いバージョンのPHPではエラーになるため、実行環境の確認が必要です。この機能は、コンストラクタの引数にpublicなどの可視性修飾子を付けることで、プロパティの宣言と初期化を同時に行うものです。これにより、冗長な記述を減らしコードを簡潔にできます。型宣言(int?string)と組み合わせることで、より安全なプログラムになります。特に?stringのように型名の前に?を付けると、その型の値またはnullを許容でき、値が存在しない場合がある変数に役立ちます。この新しい書き方は便利ですが、チームで開発する際は、プロジェクトで使うPHPのバージョンを確認することが大切です。

関連コンテンツ