[PHP] マジック定数(マジカル定数)
マジック定数とは
使われる場所によって値が変化する定数。また、ソースファイルについてのメタ情報があらかじめ格納された定数。
マジック定数に格納されている値は、プログラム上のどこからでも参照できる。マジック定数は大文字小文字を区別しないです。
現在マジック定数は9種類あります。内8種類は、__ XXX__とアンダーバー2本を左右に記述します。
マジック定数一覧
__LINE__(__line__)__FILE__(__file__)__DIR__(__dir__)__FUNCTION__(__function__)__METHOD__(__method__)__CLASS__(__class__)__TRAIT__(__trait__)__NAMESPACE__(__namespace__)ClassName::class
1. __LINE__
__LINE__ は呼び出されたソースファイル上の現在の番号を返します
1. <?php
2.
3. echo __LINE__. '行目です';
4.
5. echo __LINE__. '行目ですね';
実行結果
3行目です
5行目ですね
2. __FILE__
__FILE__ は呼び出されたファイルのフルパス+ファイル名を返します
インクルードされる(取り込まれた)ファイルの中で使用された場合、インクルードされるファイルの名前が返されます
<?php
echo __FILE__;
実行結果 例
C:/xampp/htdocs/aaa.php
<?php
include('./aaa.php') // aaa.phpを取り込み
echo __FILE__;
実行結果 例
C:/xampp/htdocs/aaa.php
C:/xampp/htdocs/bbb.php
3. __DIR__
__DIR__ は呼び出されたファイルがあるディレクトリのフルパスを返します
__FILE__ のファイル名がないバージョンと思ってください
ルートディレクトリである場合を除き、ディレクトリ名の末尾にスラッシュは付かないので注意
<?php
echo __DIR__;
実行結果 例
C:/xampp/htdocs
4. __FUNCTION__
__FUNCTION__ は呼び出された場所にある純粋な関数名を返します
もしなければ空の文字列を返します
<?php
function test_func() {
echo __FUNCTION__;
}
test_func();
echo __FUNCTION__; // 空の文字列を返します
実行結果
test_func
<?php
class Test {
public static function test_func() {
echo __FUNCTION__;
}
}
Test::test_func();
実行結果
test_func
5. __METHOD__
__METHOD__ は呼び出された場所にある関数を名前を返します
__FUNCTION__ と違うのは、クラス名などを含む厳密な名前を返します
<?php
function test_method() {
echo __METHOD__;
}
test_method();
echo __METHOD__; // 空の文字列を返します
実行結果
test_method
<?php
class Test {
public static function test_method() {
echo __METHOD__;
}
}
Test::test_method();
実行結果
Test::test_method
6. __CLASS__
__CLASS__ は呼び出された場所にあるクラス名を返します
もしクラス内でなければ空の文字列を返します
class Test {
public static function test_class() {
echo __CLASS__;
}
}
Test::test_class();
echo __CLASS__; // 空の文字列を返します
実行結果
Test
7. __TRAIT__
__TRAIT__ は呼び出された場所にあるトレイトの名前を返します
もしトレイト内でなければ空の文字列を返します
トレイトがよくわからない方は、@azukiazusaさんの【PHP】トレイトの基礎知識を参考してください。
<?php
trait TraitClass {
function test_trait() {
echo __TRAIT__;
}
}
class Test {
use TraitClass; // trait で再利用できるように
}
$test = new Test();
$test->test_trait();
実行結果
TraitClass
8. __NAMESPACE__
__NAMESPACE__ は呼び出された場所の名前空間の名前を返します
もし名前空間内でなければ空の文字列を返します
<?php
namespace User; // 名前空間を User に
class Honda {
public static function test_namespace() {
echo __NAMESPACE__;
}
}
Honda::test_namespace();
echo __NAMESPACE__; // 名前空間であるため出力されます
実行結果
User
User
9. ClassName::class
ClassName::class(クラス名::class) は呼び出された場所の名前空間を含めたクラス名を返します
<?php
namespace User;
class Honda {
public static function test_namespace() {
echo __NAMESPACE__;
}
}
echo __NAMESPACE__; // 名前空間のみ出力
echo Honda::class; // 名前空間 + クラス名
実行結果
User
User/Honda
参考
著者: E.R (株式会社ウィズツーワン)