Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. define() / defined() / const

define() / defined() / const対応: PHP 4(2000)

プログラム中で変更されない値を定数として定義する仕組みです。設定値やバージョン番号など、固定値の管理に使用します。

構文
// 実行時に定数を定義します。
define(定数名, 値);

// 定数が定義済みかどうかを確認します。
defined(定数名);

// コンパイル時に定数を定義します。
const 定数名 = 値;

// 定義済みのすべての定数を取得します。
get_defined_constants($categorize);
構文・関数一覧
構文・関数概要
define($name, $value)実行時に定数を定義します。条件分岐の中でも使用でき、変数で定数名を指定することも可能です。
defined($name)指定した名前の定数が定義済みかどうかを判定します。定義済みなら『true』、未定義なら『false』を返します。
constコンパイル時に定数を定義するキーワードです。トップレベルまたはクラス内で使用できますが、条件分岐や関数の中では使用できません。
get_defined_constants($categorize)定義済みのすべての定数を配列で返します。引数に『true』を渡すとカテゴリ別に分類されます。
PHPの組み込み定数
定数概要
PHP_VERSION実行中のPHPバージョンを文字列で返します。
PHP_INT_MAX整数の最大値です。64ビットシステムでは『9223372036854775807』になります。
PHP_EOLOS固有の改行文字です。Linuxでは『\n』、Windowsでは『\r\n』になります。
PHP_OSPHPが実行されているOS名です。
DIRECTORY_SEPARATORディレクトリの区切り文字です。Linuxでは『/』、Windowsでは『\』になります。
__FILE__現在のファイルのフルパスです。マジック定数の1つです。
__DIR__現在のファイルのディレクトリパスです。
__LINE__現在の行番号です。
サンプルコード
<?php
// define() で定数を定義します。
define('SITE_NAME', 'wp-p.info');
define('MAX_UPLOAD_SIZE', 10 * 1024 * 1024); // 10MB
echo SITE_NAME; // 『wp-p.info』と出力されます。

// const でトップレベルに定数を定義します。
const APP_VERSION = '2.0.0';
const DEBUG_MODE = false;
echo APP_VERSION; // 『2.0.0』と出力されます。

// defined() で定数の存在を確認します。
if (!defined('TIMEZONE')) {
	define('TIMEZONE', 'Asia/Tokyo');
}
echo TIMEZONE; // 『Asia/Tokyo』と出力されます。

// define() は条件分岐の中でも使えますが、const は使えません。
if (getenv('APP_ENV') === 'production') {
	define('BASE_URL', 'https://wp-p.info');
} else {
	define('BASE_URL', 'http://localhost:8080');
}

// PHP 7 以降、define() で配列を定数にできます。
define('SUPPORTED_LANGUAGES', ['PHP', 'JavaScript', 'Python']);
echo SUPPORTED_LANGUAGES[0]; // 『PHP』と出力されます。

// クラス定数の定義です。
class HttpStatus {
	public const OK = 200;
	public const NOT_FOUND = 404;
	public const SERVER_ERROR = 500;

	public static function message(int $code): string {
		return match ($code) {
			self::OK => 'OK',
			self::NOT_FOUND => 'Not Found',
			self::SERVER_ERROR => 'Internal Server Error',
			default => 'Unknown',
		};
	}
}

echo HttpStatus::NOT_FOUND; // 『404』と出力されます。
echo HttpStatus::message(200); // 『OK』と出力されます。

// マジック定数の使用例です。
echo "ファイル: " . __FILE__ . PHP_EOL;
echo "ディレクトリ: " . __DIR__ . PHP_EOL;
echo "行番号: " . __LINE__ . PHP_EOL;
echo "PHPバージョン: " . PHP_VERSION . PHP_EOL;
概要

『define()』と『const』はどちらも定数を定義しますが、使える場所に違いがあります。『const』はコンパイル時に評価されるため条件分岐の中では使えませんが、『define()』は実行時に評価されるためどこでも使えます。トップレベルで固定値を定義する場合は『const』、条件に応じて値を変えたい場合は『define()』を使い分けてください。

クラス内で定数を定義する場合は『const』キーワードを使用します。PHP 8.1 以降では『enum』を使うことで、関連する定数をより型安全にグループ化できます。

マジック定数は先頭と末尾にアンダースコア2つが付いた特殊な定数で、記述された場所によって値が変わります。デバッグ時のファイル名・行番号の取得や、ファイルの絶対パスの構築に活用できます。アクセス修飾子とクラス定数については『public / private / protected』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。