PHP の定数(define, const)を使った設定方法を徹底解説!
新人
「PHP の定数って何ですか?変数とどう違うんですか?」
先輩
「定数は、一度値を設定すると変更できない特別な変数みたいなものだよ。例えば、消費税率やアプリの設定値など、途中で変わらない値に使われることが多いんだ。」
新人
「なるほど!変数みたいに途中で変更できないんですね。どうやって作るんですか?」
先輩
「PHP では define() と const という2つの方法で定数を定義できるよ。それじゃあ、詳しく見ていこう!」
1. PHP の定数とは?(基本的な説明)
PHP における定数は、名前のとおり一度決めた値を変えずに使い続けたいときに利用する仕組みです。変数のように後から値を書き換えることはできず、スクリプト全体を通して安定した状態で扱えるのが特徴です。
たとえば、消費税率やサービス名、アプリのバージョン番号といった「途中で変わってほしくない情報」は、定数として定義しておくと扱いやすくなります。プロジェクトが大きくなるほど、こうした固定値をひと目で識別できることがコードの理解につながり、修正漏れの防止にも役立ちます。
定数を使うメリットは次のとおりです。
- 値が勝手に書き換わる心配がない:アプリの重要な設定値を安全に管理できる
- コードの見通しがよくなる:意味を持った名前を付けることで、役割がすぐに理解できる
- 設定ファイルや環境に応じた値を一元管理できる:後から値を探しに行く手間が減り、管理が楽になる
このように、定数はアプリ全体の「決まりごと」を整理するうえで欠かせない存在です。まずは基本的な使い方から順番に理解していきましょう。
2. 定数と変数の違い
ここでは、よく一緒に登場する「変数」と「定数」の違いを整理しておきます。同じように値を入れて使える仕組みですが、途中で値を変えられるかどうかという点が大きな違いです。まずはざっくり全体像を表で確認し、そのあとでシンプルなサンプルコードも見てみましょう。
| 項目 | 変数(Variable) | 定数(Constant) |
|---|---|---|
| 値の変更 | 可能($変数名 = 値;) |
不可(define() や const を使用) |
| 書き方 | $変数名 で定義 |
define() または const を使用 |
| スコープ | 関数内で宣言すればローカル、それ以外はグローバル | 基本的にグローバル |
変数は「あとから値を入れ替えられる箱」、定数は「中身を変えないラベル付きの値」のようなイメージです。一度設定した定数は変更できないため、うっかり別の値を代入してしまうことを防げます。その結果、プログラムの挙動が安定し、バグの原因を減らせるというメリットがあります。
変数と定数を並べて見てみる簡単なサンプル
イメージしやすいように、変数と定数を同じファイルの中で使ってみます。ここでは、税込価格を計算するというシンプルな例で違いを確認してみましょう。
<?php
// 変数:あとから値を変えられる
$tax = 10; // 税率10%
$price = 1000;
$priceWithTax = $price * (1 + $tax / 100);
echo "変数を使った税込価格: " . $priceWithTax . "円<br>";
$tax = 8; // 税率を8%に変更
$priceWithTax = $price * (1 + $tax / 100);
echo "税率を変更したあとの税込価格: " . $priceWithTax . "円<br>";
// 定数:途中で値を変えられない
const TAX_RATE = 10;
$priceWithConst = $price * (1 + TAX_RATE / 100);
echo "定数を使った税込価格: " . $priceWithConst . "円";
?>
このサンプルでは、$tax は何度でも値を入れ替えられるため、「途中で税率を変える」という使い方ができます。一方で、TAX_RATE は定数として宣言しているため、同じスクリプト内で別の値を代入することはできません。もしうっかり書き換えようとすると、PHP がエラーとして教えてくれます。
プログラミングに慣れていないうちは、「変えたい値は変数」「変えたくない設定値は定数」とざっくり使い分けるだけでも十分です。次のセクションでは、実際に定数を定義するための具体的な書き方(define() と const)を見ていきます。
3. 定数の基本的な使い方(define, const)
PHP では、定数を定義する方法が2つあります。
1. define() を使う方法
define() 関数を使うと、定数を作成できます。
<?php
define("サイト名", "PHP学習サイト");
echo サイト名;
?>
PHP学習サイト
define() は、定数名を 文字列 で指定する必要があります。また、関数の中でも動的に定義できるのが特徴です。
2. const を使う方法
const を使うと、定数を定義できます。
<?php
const バージョン = "1.0.0";
echo バージョン;
?>
1.0.0
const は スクリプトの実行時に事前に定義 されるため、関数の中では使えません。
define() と const の違い
| 項目 | define() | const |
|---|---|---|
| スコープ | グローバルのみ | グローバル・クラス内 |
| 関数の中で定義 | 可能 | 不可 |
| 定義方法 | define("名前", 値); |
const 名前 = 値; |
基本的に、シンプルな定数なら const を、動的に設定したい場合は define() を使うのがよいでしょう。
4. define を使った定数の設定方法と注意点
PHP では define() を使うことで、定数を設定できます。define() は、動的に定数を定義できるため、設定ファイルや環境ごとに定数を切り替える際に便利です。
define() を使った基本的な定義
<?php
define("APP_NAME", "PHPアプリ");
define("VERSION", "1.0.0");
echo "アプリ名: " . APP_NAME . "<br>";
echo "バージョン: " . VERSION;
?>
アプリ名: PHPアプリ
バージョン: 1.0.0
define() の注意点
define() には以下の注意点があります。
- 定数名は 文字列 で指定する必要がある(例:
define("定数名", 値);) - 関数の内部でも定義できる(動的な定数が作れる)
- 後から変更できないため、定義時に注意が必要
関数内での define() の使用例
<?php
function 設定定義() {
define("DB_HOST", "localhost");
}
設定定義();
echo DB_HOST;
?>
localhost
関数の中で定数を定義することができますが、関数を実行するまで定義されない ため、注意が必要です。
5. const を使った定数の設定方法と違い
PHP では、定数を定義する方法として const も利用できます。const はスクリプトの実行時に事前に定義されるため、関数内では使用できません。
const を使った基本的な定義
<?php
const サイト名 = "PHP学習サイト";
const バージョン = "1.0.0";
echo サイト名 . "(バージョン: " . バージョン . ")";
?>
PHP学習サイト(バージョン: 1.0.0)
const の注意点
- 定数名に 文字列を使わずに 直接記述する(例:
const 定数名 = 値;) - 関数の内部では使えない
- クラスの中で使用できる(クラス定数として利用可能)
関数の中で const を使うとエラー
<?php
function test() {
const ERROR_MESSAGE = "エラー発生"; // 関数内ではエラー
}
?>
Parse error: syntax error, unexpected 'const'
このように、const は関数内で定義できないため、スクリプトのトップレベルやクラス内で使用する 必要があります。
クラスの中での const の使用例
<?php
class Config {
const DB_HOST = "localhost";
const DB_USER = "root";
}
echo Config::DB_HOST;
?>
localhost
このように、const はクラスの中で定数を定義する場合に適しています。
6. 定数の使いどころ(設定ファイルや環境変数)
定数は、設定情報や環境変数を管理するのに便利です。特に、設定ファイル にまとめて記述することで、コードの管理がしやすくなります。
設定ファイル(config.php)を使った例
設定ファイルを作成し、定数を定義しておくと、どこからでも利用できるようになります。
<?php
// config.php
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASS", "password");
?>
そして、メインのスクリプトで config.php を読み込んで利用します。
<?php
include "config.php";
echo "データベースホスト: " . DB_HOST;
?>
データベースホスト: localhost
環境変数としての活用
サーバー環境ごとに異なる設定を管理する場合、環境変数を定数として利用することもあります。
<?php
define("ENV", getenv("APP_ENV"));
if (ENV === "production") {
define("DEBUG_MODE", false);
} else {
define("DEBUG_MODE", true);
}
echo "デバッグモード: " . (DEBUG_MODE ? "ON" : "OFF");
?>
デバッグモード: ON
このように、getenv() を使って環境変数を取得し、定数として扱うことで、環境に応じた設定を柔軟に管理できます。
まとめ
PHP の定数は、アプリケーションの設定値や環境変数を管理するのに便利です。特に、define() は動的に定義できる点が特徴で、const はクラス内で使用できるため、適切に使い分けましょう。
7. 定数のスコープ(グローバル定数とクラス定数)
PHP では、定数のスコープ(適用範囲)を理解することが重要です。定数には、グローバル定数とクラス定数の2種類があります。
グローバル定数
グローバル定数は、define() または const を使って定義され、スクリプトのどこからでもアクセスできます。
<?php
define("APP_VERSION", "1.0.0");
echo "アプリのバージョン: " . APP_VERSION;
?>
アプリのバージョン: 1.0.0
グローバル定数は、関数やクラスの外側で定義され、スクリプト全体で利用できます。
クラス定数
クラス定数は、const を使ってクラスの中で定義します。クラス定数は、オブジェクトを作成しなくても直接アクセスできます。
<?php
class AppConfig {
const VERSION = "2.0.0";
}
echo "クラスのバージョン: " . AppConfig::VERSION;
?>
クラスのバージョン: 2.0.0
クラス定数は、クラスの内部で定義され、クラス名::定数名 の形式でアクセスできます。
8. 定数を使う際のベストプラクティス(命名規則や使い分け)
定数を使う際には、いくつかのベストプラクティスを意識することで、コードの可読性と保守性を向上させることができます。
1. 命名規則
定数名は、以下のルールに従うのが一般的です。
- すべて大文字(例:
APP_NAME) - 単語の区切りはアンダースコア(_)(例:
DB_HOST) - わかりやすい名前を付ける(例:
MAX_USERSなど)
2. 定数の使い分け
PHP では、用途に応じて define() と const を使い分けることが重要です。
| 用途 | 推奨される定義方法 |
|---|---|
| シンプルな定数 | const |
| 動的に定義する定数 | define() |
| クラスの中で使用する定数 | const |
| 設定ファイルの定義 | define() |
基本的に、定数をシンプルに定義する場合は const を、設定ファイルや動的な定数を定義する場合は define() を使うとよいでしょう。
9. 定数を活用した実践的なサンプルコード(アプリ設定や環境変数の利用)
定数を活用することで、アプリの設定や環境変数を統一的に管理できます。
1. 設定ファイルを使った例
アプリの設定を config.php にまとめておくと、管理がしやすくなります。
<?php
// config.php
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASS", "password");
define("APP_ENV", "development");
?>
そして、メインのスクリプトで設定ファイルを読み込んで利用します。
<?php
include "config.php";
echo "データベースホスト: " . DB_HOST;
?>
データベースホスト: localhost
2. 環境変数を使った例
環境ごとに設定を変更したい場合、環境変数を定数として利用することができます。
<?php
define("ENV", getenv("APP_ENV"));
if (ENV === "production") {
define("DEBUG_MODE", false);
} else {
define("DEBUG_MODE", true);
}
echo "デバッグモード: " . (DEBUG_MODE ? "ON" : "OFF");
?>
デバッグモード: ON
このように、getenv() を使って環境変数を取得し、定数として扱うことで、環境に応じた設定を柔軟に管理できます。
3. クラスを使った設定の管理
定数をクラスの中で使うことで、設定をより整理することができます。
<?php
class Config {
const DB_HOST = "localhost";
const DB_USER = "root";
const DB_PASS = "password";
public static function getDbConfig() {
return [
"host" => self::DB_HOST,
"user" => self::DB_USER,
"pass" => self::DB_PASS
];
}
}
$dbConfig = Config::getDbConfig();
echo "データベースホスト: " . $dbConfig["host"];
?>
データベースホスト: localhost
このように、クラスを使って定数をまとめることで、アプリケーションの設定を整理しやすくなります。
まとめ
PHP の定数は、アプリケーション全体の“土台”となる設定を安定して扱うための、とても頼りになる仕組みです。特に、プロジェクトが大きくなるにつれて「この値はどこで管理しているんだろう?」という場面が増えてきますが、定数を上手く使えていると、そうした迷いがぐっと減ります。
この記事では define() と const の基本から、その違い、設定ファイル・環境変数との組み合わせまで幅広く取り上げてきました。実際の開発では、固定された設定値を const で整理したり、環境に応じて動的に切り替えたい設定は define() で扱ったりと、状況に応じた使い分けが求められます。
また、命名規則(全て大文字+アンダースコア)を統一するだけでも、コードの読みやすさは大きく変わります。こうした細かい部分を積み重ねることで、保守しやすく、変更にも強い PHP アプリケーションを作れるようになります。
実用例:環境ごとの切り替えを管理する定数の使い方
define("ENV", getenv("APP_ENV") ?: "development");
if (ENV === "production") {
define("DB_HOST", "db.prod.example.com");
define("DEBUG_MODE", false);
} else {
define("DB_HOST", "localhost");
define("DEBUG_MODE", true);
}
echo "現在の環境: " . ENV . "<br>";
echo "データベース: " . DB_HOST . "<br>";
echo "デバッグモード: " . (DEBUG_MODE ? "ON" : "OFF");
現在の環境: development
データベース: localhost
デバッグモード: ON
このように、環境変数と定数を組み合わせることで、開発環境と本番環境で設定を安全に切り替えることができます。設定が複雑になっても全体像を見失いにくくなるため、PHP で安定運用を目指すなら必ず押さえておきたいポイントです。
新人
「今回、PHP の定数について学んでみて、仕組みがはっきり分かってきました。特に define() と const の役割の違いが印象に残りました。」
先輩
「そうだね。実行時に値を決めたいなら define()、最初から変わらない設定なら const、この使い分けが分かれば一歩前進だよ。」
新人
「クラスの中では const、関数の中では define() を使う理由もよく理解できました。エラーで悩んでいた部分がスッキリしました!」
先輩
「それと、定数名の書き方も大事だよ。大文字とアンダースコアで統一しておくと、設定値がどこにあるか一目で分かるからね。」
新人
「はい!これからは環境ごとの設定も含めて、定数を活用しながら整理していきます!」
先輩
「その調子。定数を上手く扱えるようになると、PHP のコードは本当に扱いやすくなるよ。」