4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PHP】マジック定数(マジカル定数)

Posted at

[PHP] マジック定数(マジカル定数)

マジック定数とは

使われる場所によって値が変化する定数。また、ソースファイルについてのメタ情報があらかじめ格納された定数。
マジック定数に格納されている値は、プログラム上のどこからでも参照できる。マジック定数は大文字小文字を区別しないです。
現在マジック定数は9種類あります。内8種類は、__ XXX__とアンダーバー2本を左右に記述します。

マジック定数一覧

  1. __LINE__(__line__)
  2. __FILE__(__file__)
  3. __DIR__(__dir__)
  4. __FUNCTION__(__function__)
  5. __METHOD__(__method__)
  6. __CLASS__(__class__)
  7. __TRAIT__(__trait__)
  8. __NAMESPACE__(__namespace__)
  9. ClassName::class

1. __LINE__

__LINE__ は呼び出されたソースファイル上の現在の番号を返します

1. <?php
2.
3. echo __LINE__. '行目です';  
4.
5. echo __LINE__. '行目ですね';


実行結果
3行目です
5行目ですね

2. __FILE__

__FILE__ は呼び出されたファイルのフルパス+ファイル名を返します
インクルードされる(取り込まれた)ファイルの中で使用された場合、インクルードされるファイルの名前が返されます

aaa.php
<?php

echo __FILE__;

実行結果 
C:/xampp/htdocs/aaa.php
bbb.php
<?php

include('./aaa.php') // aaa.phpを取り込み

echo __FILE__;

実行結果 
C:/xampp/htdocs/aaa.php
C:/xampp/htdocs/bbb.php

3. __DIR__

__DIR__ は呼び出されたファイルがあるディレクトリのフルパスを返します
__FILE__ のファイル名がないバージョンと思ってください
ルートディレクトリである場合を除き、ディレクトリ名の末尾にスラッシュは付かないので注意

aaa.php
<?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
__FUNCTION__との違い
<?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 (株式会社ウィズツーワン)
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?