複数のWebサイトを運用していて、それぞれ異なる設定を持たせたい場合、ドメインに応じて定数を自動的に設定する方法が役立ちます。
ここでは、PHP 8以降の構文を使って、ホスト名に応じた定数を動的に定義する例を紹介します。
実装コード
以下は、現在のドメイン名(ホスト名)に含まれる文字列をチェックし、それに応じて定数 SITE_TYPE を定義する例です。
// ================================
// サイト種別自動設定(ドメインによる)
// ================================
define('SITE_TYPE', match (true) {
str_contains($_SERVER['HTTP_HOST'], 'alpha-site') => 0,
str_contains($_SERVER['HTTP_HOST'], 'beta-site') => 1,
str_contains($_SERVER['HTTP_HOST'], 'gamma-site') => 2,
str_contains($_SERVER['HTTP_HOST'], 'delta-site') => 3,
default => 0, // 不明な場合は0
});
ポイント解説
✔ match(true) の仕組み
match(true) は if-elseif を簡潔に書ける構文です。
各行で「この条件がtrueだったら → この値を返す」という形式で記述します。
例:
match (true) {
条件A => 値A,
条件B => 値B,
...
}
✔ str_contains() を使ったホスト名判定
str_contains($haystack, $needle) は、文字列 $haystack に $needle が含まれるかをチェックします。
この場合は $_SERVER['HTTP_HOST'] に特定のキーワードが含まれているかを判定しています。
✔ default によるフォールバック
すべての条件に一致しない場合でも、default => 0 によって安全な初期値を保証します。
実用例
設定された定数 SITE_TYPE を用いて、環境に応じた表示や動作を分岐できます。
$siteName = match(SITE_TYPE) {
0 => 'Alpha Site',
1 => 'Beta Site',
2 => 'Gamma Site',
3 => 'Delta Site',
default => 'Unknown Site',
};
if (SITE_TYPE === 1) {
include 'config-beta.php';
}
この仕組みのメリット
- 環境設定の自動化:サーバー設定に依存せずに切り替え可能
- 管理しやすい:ドメイン名さえ分かれば、他の設定ファイルを変更する必要がない
- 保守性が高い:定数なのでグローバルに一貫性を持って扱える
注意点
- PHP 8.0以上が必要です(
matchおよびstr_containsを使用) - ホスト名の取得には
$_SERVER['HTTP_HOST']を使用しており、CLI実行などでは値が得られない場合があります
まとめ
PHPの match(true) と str_contains() を組み合わせることで、ドメイン名に応じた環境定数の自動設定をスマートに実現できます。
複数サイトを管理するプロジェクトで、環境分岐の管理をシンプルにしたい方には特におすすめです。



コメント