【PHP入門】define()とconstの違いを徹底比較!定数宣言の正しい使い分け
PHPで定数を宣言する方法には、define()関数とconstキーワードの2つがあります。どちらも定数を定義できる点は共通していますが、内部の動作や使用できる場面にいくつか重要な違いがあるため、それぞれの特徴を理解して使い分けることが大切です。
基本的な構文
<?php
const VAR = 'FOO'; // constキーワードによる宣言
define('VAR', 'FOO'); // define()関数による宣言
?>
それでは、両者の具体的な違いを順番に見ていきましょう。
define()とconstの主な違い
1. 定義されるタイミング:コンパイル時 vs 実行時
両者の最も根本的な違いは、定数が定義されるタイミングです。constはコンパイル時に定数を定義するのに対し、define()は実行時に定義します。そのため、constの方がわずかにパフォーマンス面で有利です。
2. 条件分岐内での使用可否
constはif文などの条件分岐ブロックの中で定数を宣言できません。一方、define()は実行時に評価されるため、条件分岐の中でも定義できます。
<?php
if ($flag) {
const VAR = 'FOO'; // 無効:エラーになる
}
if ($flag) {
define('VAR', 'FOO'); // 有効:正常に動作する
}
?>
3. 受け付けられる値の種類
constは静的なスカラー値(数値、文字列、true / false / null、__FILE__ など)のみを受け付けます。一方、define()は変数や関数の戻り値など、任意の式を受け付けることができます。
<?php
$value = 'FOO';
define('VAR', $value); // 有効:変数の値を定義できる
const VAR = $value; // 無効:変数は指定できない
?>
4. 大文字・小文字の扱い
constで宣言した定数は、常に大文字・小文字が区別されます。define()ではかつて第3引数にtrueを渡すことで、大文字・小文字を区別しない定数を定義できましたが、この機能はPHP 7.3で非推奨となり、PHP 8.0で削除されました。現在はどちらの方法でも定数は常にケースセンシティブであると考えてください。
5. クラス・インターフェース内での定義
constはクラスやインターフェースの中で、クラス定数やインターフェース定数を宣言するために使用できます。一方、define()はクラス内では使用できません。
<?php
class abc {
const VAR = 2; // 有効:クラス定数として宣言できる
}
echo abc::VAR; // 有効:「abc::VAR」でアクセス可能
// 一方、define()の場合
class xyz {
define('XUV', 2); // 無効:クラス内では使用できない
}
?>
この例からもわかるように、クラス内での定数宣言にはconstキーワードを使用し、define()をクラス内で呼び出すことはできません。
まとめ
define()とconstの違いを整理すると、以下のようになります。
- const:コンパイル時に定義され、高速。静的な値のみ指定可能。クラス定数にも使える。
- define():実行時に定義されるため、条件分岐内での宣言や変数・式の利用が可能。ただしクラス内では使えない。
特別な理由がない限りは、パフォーマンス面で有利なconstを使用するのが推奨されます。動的な値を定義したい場合や、条件によって定数を出し分けたい場合などにのみ、define()を選ぶとよいでしょう。
-
PHPのasort()関数の使い方をわかりやすく解説
PHPのasort()関数は、連想配列を値に基づいて昇順にソートし、キーと値の関連性(インデックスの対応関係)を保持したまま並べ替えを行う関数です。通常のsort()関数と異なり、ソート後も元のキーがそのまま維持されるため、連想配列の取り扱いに非常に便利です。構文asort(arr, compare)パラメータarr − ソート対象となる配列を指定します。compare − 配列要素の比較方法を指定します(省略可能)。指定できる値は以下の通りです。SORT_STRING − 要素を文字列として比較しますSORT_REGULAR − 型を変換せずに要素を通常の方法で比較しますSORT_NUMER
-
PHPのarsort()関数の使い方:配列を降順ソートしてキーの関連性を保持する方法
arsort()関数とはarsort()関数は、配列を降順(逆順)にソートするPHPの組み込み関数です。最大の特徴は、ソート後もキーと値の関連性(インデックスの関連付け)が維持される点にあります。連想配列を値の大きい順に並べ替えたい場合に特に便利です。構文arsort(arr, compare)パラメータarr − ソート対象の配列を指定します。compare − 配列要素の比較方法を指定します(省略可能)。指定できる値は以下のとおりです。SORT_STRING − 要素を文字列として比較しますSORT_REGULAR − 型を変換せずに通常の方法で要素を比較しますSORT_NUMERIC −