PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの定数とは?define()関数とマジック定数の使い方を徹底解説

はじめに

定数とは、$x = 10$name = "XYZ" のような代入式において、リテラルとして表される値のことです。この例では、10 が数値定数、XYZ が文字列定数であり、それぞれ変数に代入されています。

PHPでは、define() 関数を使うことで、ユーザーが独自に名前を付けた識別子で定数を定義することができます。変数と異なり、一度定義した定数の値はスクリプト実行中に変更できない点が特徴です。

構文

define ( string $name , mixed $value [, bool $case_insensitive = FALSE ] ) : bool

パラメータ

No.パラメータと説明
1name
定義する定数の名前を指定します。慣習として、大文字で命名されることが一般的です。
2value
定数に格納する値です。整数・浮動小数点数・文字列などのスカラー値のほか、PHP 5.6以降では配列も指定できます。
3case_insensitive
デフォルトでは、定数名は大文字小文字を区別します。このパラメータを true に設定すると、name と NAME は同じものとして扱われます。
※なお、このパラメータは PHP 7.3 で非推奨となり、PHP 8.0 以降では廃止されているため注意が必要です。

戻り値

定数の定義が成功した場合は TRUE を、失敗した場合は FALSE を返します。

使用例:define()関数で定数を定義する

次の例では、define() 関数を使ってさまざまな型の定数を定義しています。

<?php
define("maxmarks", 300);
define("pi", 3.142);
define("subjects", ["phy", "che", "maths"]);
?>

このように、整数・浮動小数点数・配列など、さまざまな型の値を定数として定義できます。定義された定数には、変数のように $ を付けずに直接アクセスできます。

マジック定数(magic constants)

PHPには多数の組み込み定数(プリdefined定数)が用意されていますが、その多くは対応する拡張モジュールがインストールされている場合にのみ有効になります。しかし、以下に挙げる「マジック定数」と呼ばれる定数は、常に利用可能です。

マジック定数の特筆すべき点は、その値が使用された場所によって動的に決まるという点です。これらの定数はコンパイル時に解決されるため、通常の定数とは異なり define() では定義できません。

名前説明
__LINE__ファイル上における現在の行番号。
__FILE__ファイルのフルパスとファイル名。
__DIR__そのファイルが存在するディレクトリのパス。
__FUNCTION__関数名。無名関数(クロージャ)の場合は {closure} となります。
__CLASS__クラス名。宣言された名前空間も含まれます(例:Foo\Bar)。PHP 5.4 以降ではトレイト内でも使用可能で、その場合はトレイトを使用しているクラスの名前が返されます。
__TRAIT__トレイト名。宣言された名前空間も含まれます(例:Foo\Bar)。
__METHOD__クラスのメソッド名(クラス名とメソッド名を含む)。
__NAMESPACE__現在の名前空間の名前。

マジック定数の使用例

次の例では、代表的なマジック定数の使い方を示しています。

<?php
echo "行番号: " . __LINE__ . "\n";
echo "ファイル名: " . __FILE__ . "\n";
echo "ディレクトリ名: " . __DIR__ . "\n";

function myfunction(){
    echo "関数名: " . __FUNCTION__ . "\n";
}

class myclass{
    public function __construct() {
        echo __CLASS__ . "\n";
    }
    public function mymethod(){
        echo __METHOD__;
    }
}

$obj = new myclass();
$obj->mymethod();
?>

出力結果

上記のコードを実行すると、以下のような結果が表示されます。

行番号: 2
ファイル名: C:\xampp\php\testscript.php
ディレクトリ名: C:\xampp\php
myclass
myclass::mymethod

まとめ

PHPの定数は、define() 関数や const キーワードを使って定義でき、スクリプト全体で不変の値を扱う際に便利です。また、__LINE__ や __FILE__ などのマジック定数を活用すれば、デバッグ時に行番号やファイル位置を簡単に把握できるため、開発効率の向上にもつながります。用途に応じて両者を使い分けましょう。

  1. PHPでドメイン名を検証する方法を解説!正規表現を使ったバリデーションの実装例

    PHPでドメイン名の妥当性をチェックするには? PHPでは、preg_match() 関数と正規表現を組み合わせることで、ドメイン名が正しい形式かどうかを簡単に検証できます。以下のサンプルコードでは、「使用できる文字の種類」「文字列全体の長さ」「各ラベル(ピリオドで区切られた部分)の長さ」という3つの観点からドメイン名をチェックしています。 サンプルコード <?php function is_valid_domain_name($domain_name) { return ( preg_match(/^([a-z\d](-*[a-z\d])*)(\.([a-z\

  2. PHPのzip_entry_name()関数とは?使い方とサンプルコードを解説

    PHPのzip_entry_name()関数は、ZIPアーカイブ内に格納されているファイル(エントリ)の名前を取得するための関数です。この関数を使用することで、ZIPファイルの中にどのようなファイルが含まれているのかを簡単に確認できます。構文zip_entry_name(zip_entry)パラメータzip_entry − zip_open()で開いたZIPリソースに対してzip_read()で読み込んだ、ZIPディレクトリエントリを指定します。戻り値zip_entry_name()関数は、指定したZIPエントリ(アーカイブ内のファイル)の名前を文字列として返します。以下に具体例を示します。「