define と const の違い

定数

目次一覧

 状態:-  閲覧数:8,069  投稿日:2010-07-06  更新日:2020-04-10  
PHPで定数を定義する方法は2種類ある / 配列定数の定義

PHPで定数を定義する方法は2種類ある / 配列定数の定義

 閲覧数:2,706 投稿日:2020-04-10 更新日:2020-04-22 

PHPで定数を定義する方法は2種類ある


比較一覧表
- define const 備考
種別 関数 構文 -
「変数」や「関数」の「戻り値」使用可否 × -
トップレベル以外( if や for function の中)での使用可否 × -
配列定数の定義 PHP 7 以降で〇 PHP 5.6 以降で〇 (後から代入出来ないため、)何れも初期化式で定義する。※定数なので、一度定義すると変更は不可能
呼び出し速度 (関数呼び出しのオーバーヘッドがあるため)遅い (関数ではないから)速い -
■define
・宣言する場所 - クラス外
・スコープ … グローバル
・記述例 … define('MESSAGE', 'Hello World')
・参照方法 … 「定数名」
・宣言時に、「演算を行ったり関数を呼び出した戻り値」を定義することができるか? … 可

<具体例>
「ファイル、ディレクトリへの絶対パス」、「開発時と運用時の動作変更のためのフラグ」、「webサイトのタイトル」、「URL」、「メールアドレス」などを、config(設定)ファイルに記述したりする



■const
・宣言する場所 - クラス内
・スコープ … クラス内
・記述例 … const MESSAGE = 'Hello World';
・参照方法 … 「クラス名::定数名」もしくは「self::定数名」
・宣言時に、「演算を行ったり関数を呼び出した戻り値」を定義することができるか? … 不可
★constは、PHP5.3以降でしか利用不可



※「const定数」と「staticプロパティ」の違い
「インスタンスではなくクラスに所属している」「インスタンス化せずに利用できる」点では同じ。
但し、「const定数」は定数なので、一度設定した値は変更不可。
一方、「staticプロパティ」はプロパティなので、何度でも変更可能

配列定数の定義


書式
define('定数配列名1', ['値1', 'キー2' => '値2']);

定数定義後、代入しようとすると、下記エラーが発生する
・定数なので、一度定義すると変更は不可能
・後から代入出来ない
Cannot use temporary expression in write context

デバッグ
定数配列要素を確認
var_dump(定数配列名1['キー2'];)

配列定数をループで使用する
foreach (定数配列名1 as $value) {
   echo $value;
}

配列定数が定義されていない場合は、nullではなくstringが返るので注意が必要
定義済みどうかは、is_array()で条件分岐する


PHPの「define」と「const」の違い
PHPで定数に配列を使う方法


定数

「定数」✕「三項演算子」

コメント投稿(ログインが必要)



類似度ページランキング
順位 ページタイトル抜粋
1 define と const の違い 78
2 new clone違い 48
3 Doctrine 46
4 setcookie関数 41
5 session.hash_function 41
6 register_shutdown_function 41
7 syntax error 40
8 include_path 40
9 include 40
10 Exceptionクラス 40
11 session_destroy関数 40
12 No route found fo 40
13 session.gc_maxlifetime 40
14 SessionHandler::gc 39
15 json_encode関数 39
16 include require 36
17 session_start() 36
18 Generators 36
19 isset 35
20 No data available for specified ID 35
2026/1/01 5:40 更新
週間人気ページランキング / 12-25 → 12-31
順位 ページタイトル抜粋 アクセス数
1 Notice(エラーメッセージ) カテゴリー 4
2 PHPにおけるメソッドのオーバーライドについて /「引数の数や型は、親クラスのメソッドと完全に一致していなければなりません。」とは具体的にどういう意味ですか? 3
2 PHPで定数を定義する方法は2種類ある / 配列定数の定義 3
2 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 3
3 「POSIX正規表現」と「PCRE正規表現」の違い 2
3 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined | Fatal error(エラーメッセージ) 2
3 Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting | エラーメッセージ 2
3 http_build_query | URLs(関数) 2
3 or(||) | 演算子 2
3 No route found fo | エラーメッセージ 2
3 and | 演算子 2
4 Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): failed to open stream: Permission denied in | Fatal error(エラーメッセージ) 1
4 curl で Cookie を使用する 1
4 文字列型(string) | 型 1
4 You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. | Twitter API(エラーメッセージ) 1
4 Catchable fatal error: Object of class DateTime could not be converted to string | Fatal error(エラーメッセージ) 1
4 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 1
4 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 1
4 Warning: strlen() expects parameter 1 to be string, array given in ○○.php on line △△ | Warning(エラーメッセージ) 1
4 ob紛らわしい関数()一覧 | 出力バッファリング制御(関数) 1
2026/1/1 1:01 更新