定数は、一度定義すると変更できない値です。プログラム全体で使う設定値(税率、サイト名、データベース接続情報など)を定数として定義すると、誤って値を変更するバグを防げます。
define()で定数を定義
PHP
<?php
// define()で定数を定義
define("SITE_NAME", "My Website");
define("TAX_RATE", 0.10);
define("MAX_LOGIN_ATTEMPTS", 5);
echo SITE_NAME; // My Website
echo "<br>";
echo "税率: " . (TAX_RATE * 100) . "%"; // 税率: 10%
echo "<br>";
// 定数は変更不可(エラーになる)
// SITE_NAME = "Other"; // Fatal error
?>
実行結果
My Website
税率: 10%
定数名は慣例的に大文字のスネークケース(MAX_LOGIN_ATTEMPTS)で書きます。変数と違い、$は付けません。
constで定数を定義
PHP 5.3以降では const キーワードでも定数を定義できます。
PHP
<?php
const VERSION = "1.0.0";
const DEBUG_MODE = false;
echo VERSION; // 1.0.0
?>
define()とconstの違い
| 特徴 | define() | const |
|---|---|---|
| 条件分岐内での定義 | ○ 可能 | × 不可 |
| クラス内での定義 | × 不可 | ○ 可能 |
| 配列の定数 | ○(PHP 7+) | ○(PHP 5.6+) |
| 実行タイミング | 実行時 | コンパイル時 |
PHP
<?php
// define()は条件分岐内で使える
if (true) {
define("ENV", "production");
}
echo ENV; // production
// constはクラス内で使える
class Config {
const DB_HOST = "localhost";
const DB_NAME = "myapp";
}
echo Config::DB_HOST; // localhost
?>
使い分けのポイント
クラス内の定数は const、グローバルな設定値は define() を使うのが一般的です。モダンなPHPではクラス定数(const)が好まれます。
定義済み定数
PHPにはあらかじめ定義されている定数もあります。
PHP
<?php
echo PHP_VERSION; // 8.2.12(PHPバージョン)
echo PHP_INT_MAX; // 9223372036854775807(整数の最大値)
echo PHP_EOL; // 改行文字
echo PHP_OS; // Linux(OS名)
echo DIRECTORY_SEPARATOR; // /(ディレクトリ区切り文字)
?>
まとめ
- 定数は一度定義すると変更できない値で、設定値に使う
define()はグローバル定数、constはクラス定数の定義に適している- 定数名は大文字のスネークケースで書くのが慣例
- PHPには
PHP_VERSIONなど多数の定義済み定数がある