基礎

PHPの定数入門|define()とconstの使い方

定数は、一度定義すると変更できない値です。プログラム全体で使う設定値(税率、サイト名、データベース接続情報など)を定数として定義すると、誤って値を変更するバグを防げます。

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など多数の定義済み定数がある