PHPでは、define()関数を使って定数を定義することができます。
変数と違って、定数は、一度定義するとその値をあとから変更することができません。
今回は、define()関数で定義する定数について、基本の書き方からconstやenumとの使い分けまでを紹介します。
※本記事の内容はPHP8.x系を前提としています。PHP8.0以降、定数関連の仕様が一部変更されているため、古いPHPを使っている場合は挙動が異なることがあります。
本サイトではXAMPP(ザンプ)という開発環境を使用しています。
XAMPPのインストール方法や起動方法については以下の記事をご参照下さい。
▶ PHP【 開発環境 】XAMPP インストール
▶ PHP【 開発環境 】XAMPP の使い方
なお、未経験からITエンジニアへの就職に興味がある方や未経験からプログラミングを効率よく学びたいと考えている方は、就職率98.3%で受講料無料のプログラミングスクールプログラマカレッジもおすすめです。
最終更新日:2026年8月6日
定数は、変数と同様、データを格納する名前付きの箱のようなものです。ただし、変数とは違い、一度定義したあとで値を変更できないという特徴があります。
たとえば金額を扱うプログラムで、「円」という単位を毎回表示する場合、この文字を定数として定義しておくと便利です。数値データと定数をつなげることで、金額の表示を簡単に作れます。
define("UNIT", "円");
echo 1000 . UNIT; // 1000円
このように、あとで変える必要のないデータは、定数として定義しておくとコードがわかりやすくなり、うっかり値を書き換えてしまうミスも防げます。たとえば、消費税率やサイト名、メッセージの定型文など、何度も使うけれど変更しない値は、定数に向いています。
PHPでdefine()関数を使って定数を定義する基本形は、次のとおりです。
define( "定数名", データ );
定数には、変数と同じように、数値や文字列、trueやfalseなどの値のほか、配列を入れることもできます。
PHPで定数を定義する方法の1つとして、define()関数があります。
define("TAX_RATE", 0.10);
この例では、消費税率10%を表す0.10という数値を、TAX_RATEという定数名で定義しています。税率のように「何度も使うけれど、頻繁には変わらない値」は、定数にしておくと管理がしやすくなります。
定数名は自由に決められますが、一般的には英大文字とアンダースコア(_)を使うことが多いです。例えば、次のように命名します。
なお現在のPHPでは、以前存在した「定数名の大文字・小文字を区別しない設定」は使えません(PHP7.3で非推奨化、PHP8.0で完全に廃止)。そのため、定数を使うときは定義した名前のとおりに書きます。
例えば、次のように定数を定義した場合、使うときも大文字で「TAX_RATE」と書く必要があります。
define("TAX_RATE", 0.10);
echo TAX_RATE;
ここで、「tax_rate」のように定義した表記と違う書き方をすると、その定数は存在しないと判断され、致命的エラーで処理が止まってしまいます。「定義した名前と完全に同じ表記で使う」と覚えておきましょう。
プログラミングで「グローバル」とは、プログラムのどこからでも参照できる(使える)という意味です。
たとえば、通常、関数の中で定義した変数は、原則としてその関数の中からしか参照できません(これを「変数のスコープ(有効範囲)」と言います)。
これに対し、define()で定義した定数は、たとえ関数の中で定義したものであっても、プログラムのどこからでも名前を書くだけで参照できます。
この「場所を選ばず参照できる」という性質のことを「グローバル」と呼びます。
function setTaxRate() {
define("TAX_RATE", 0.10); // 関数の中で定義しても…
}
setTaxRate();
echo TAX_RATE; // 関数の外からでも参照できる(0.1)
※このあと紹介するconstも、定義する場所次第ではグローバルになるため、「define()だけがグローバル」というわけではありません。両者の違いは3-1. で説明します。
PHPで定数を作る方法には、大きく分けて2つあります。
• define()…関数を使って実行時に定数を定義する
• const…キーワードを使ってコンパイル時(コードの解析時)に定数を定義する
どちらも定数を作れますが、「定義できる場所とタイミング」「名前や値に指定できるもの」が本質的に異なります。次の表は、主な項目についての比較です。
| 比較項目 | define() (関数) |
const (キーワード) |
|---|---|---|
| 定義を書ける場所 | どこでも (関数や条件分岐の中でもOK) |
クラス内 (またはファイルのトップレベル) |
| 定義タイミング | 実行時 | コンパイル時 (コードの解析時) |
| 値にできるもの | 任意の式 (変数・関数の戻り値もOK) |
定数式のみ (変数・関数の戻り値はNG) |
| スコープ | 常にグローバル定数 | クラス定数 または グローバル定数 (定義場所による) |
| 名前に変数を使う | 可能 | 不可能 |
| パフォーマンス | やや遅い | 速い |
どちらを使うかは、スコープ(グローバルかどうか)ではなく、次の観点で選びます。
• 決まった値をプログラムの先頭で定義しておきたい
→ const(速く、書き方もシンプル)
• 条件によって定義するかどうかを変えたい、関数の中で定義したい、定数名や値を実行時にしか決められない
→ define()
• クラスに関連する固定値をまとめたい
→ const(クラス定数として)
実務上は、通常はconstを使い、「条件分岐の中で定義したい」「実行時にしか値が決まらない」など「define()でなければ実現できない場合」にdefine()を使う、という考え方が一般的です。
キーワードconstで定義するオブジェクト定数については、PHP【const】オブジェクト定数の定義 をご参照下さい。
「曜日」「注文ステータス」「ユーザー権限」のように、関連する複数の固定値をひとまとまりのグループとして扱いたい場合、PHP8.1で導入されたenum(列挙型)を使う方法もあります。
定数をバラバラに定義するよりも、値の種類が限定されていることをコード上で明確にでき、タイプミスによるバグも防ぎやすくなります。定数を複数まとめて使うケースでは、enumへの置き換えも選択肢に入れるとよいでしょう。
define()関数を使用して定義した定数を、実際に使用してみます。
ソースファイルを以下のように作成します。
(ソースファイルの作成方法についてはソースファイルを作成をご参照下さい。)
<?php
define("TAX_RATE", 0.10);
$price = 1000;
echo $price * (1 + TAX_RATE);
?>
上記の「 echo 」は、データを画面に出力するためのPHPの命令です。
サーバーを起動して、ブラウザからソースファイルにアクセスしてみて下さい。
(サーバーの起動方法等についてはサーバーを起動をご参照下さい。)

このプログラムでは、定数TAX_RATEに入っている消費税率10%を使い、1,000円の商品に対して税込み価格を計算しています。そのため、ブラウザには1100が表示されます。
このように、定数は変数と同じく、定数名を使って値を利用することができます。ただし変数と違って、一度定義した値はあとから変更できません。これが定数の大きな特徴です。
【A】変数のように「 $ 」は付けず、定数名をそのまま書いて使います。
【A】できません。変更したい値には変数を使います。
【A】できません。すでに定義された定数名を再定義しようとすると、エラーになります。同じ名前の定数がすでに定義されているか事前にチェックしたい場合は、defined()関数が使えます。
【A】その定数を使う行より前に書く必要があります。define()の場合、本記事で紹介したように、関数や条件分岐の中など、実行時の状況に応じて定義したい場所に書かれることが多いです。
【A】はい。PHP7.0以降、配列を定数として定義することができます。
【A】プログラムの先頭で固定値を定義するだけなら、constがおすすめです。条件によって定義を変えたい場合や、動的な値を定数として定義したい場合などは、define()を使います。関連する値がいくつもある場合は、enumの利用も検討しましょう。
PHPのdefine()について、いかがでしたでしょうか。
「いつかPHPプログラマーになりたいけど、独力では限界がある!」と感じている方には、「プログラマカレッジ」もおすすめです。
プログラマカレッジは、本気でプログラマーを目指す方のための就職支援付き、受講料無料のプログラミングスクールです。今回ご紹介したPHPを含む豊富なカリキュラムで、IT初心者からプログラマーとして就職するまで、プロが完全にサポートします。
本気でプログラマーとして就職・転職したいという方は、ぜひ一度のぞいてみて下さいね。
→ 就職支援付き無料プログラミングスクール「プログラマカレッジ」
INTERNOUS,inc. All rights reserved.