[ PHP ] 自動定義定数 ( ファイル名、クラス名、ファイル名、行数 )

Pocket

ここでは、PHP で自動的に定義される定数を掲載しています。ディレクトリ名やファイル名やネームスペースなど、PHP にも多言語と同様にそれらの定数が存在します。

スポンサーリンク

自動定義定数の出力サンプル

PHP で自動的に定義される定数の出力結果例になります。詳細はサンプル内のコメント内を参照ください。

// 階層付でネームスペースを設定する
namespace Top\Sub\SubSub;

class classA
{
    public function func()
    {
        // ネームスペース、クラス名、メソッド名、行数を出力する
        echo __NAMESPACE__ . "::" . __CLASS__  . '::' . __METHOD__ . '(line='. __LINE__ . ')';
        //
        // Top\Sub\SubSub::Top\Sub\SubSub\classA::Top\Sub\SubSub\classA::func(line=11)
        //
        // ネームスペースが設定されているとクラス名やメソッド名にもネームスペースが付与される

        // __CLASS__ は以下と同等
        echo get_class($this); // Top\Sub\SubSub\classA

        // 関数名を出力する
        // __FUNCTION__ 定数の場合はネームスペースは付与されない
        echo __FUNCTION__; // func
    }
}

// ファイルの存在するディレクトリ名の絶対パスを出力する
echo __DIR__;              // /path/to/dir
// __DIR__ は以下と同等
//echo dirname(__FILE__);  // /path/to/dir

// ファイルの絶対パスを出力する
echo __FILE__;             // /path/to/dir/file.php

$a = new classA();
$a->func();

※ __NAMESPACE__ および __DIR__ は PHP5.3.0 以降で使用可能となりました。

継承したクラス名における get_class 関数の出力結果

このサンプルスクリプトの出力結果は get_class 関数の仕様に関するモノです。__CLASS__ や __METHOD__ などの自動定義定数は継承には依存せず、記述した部分のクラス名やメソッド名が格納されます。

// 親クラス
class parentClass
{
    public function func()
    {
        echo get_class($this); // Top\Sub\SubSub\childClass
        echo get_class();      // Top\Sub\SubSub\parentClass
    }
}

// 子クラス
class childClass extends parentClass
{
}

$c = new childClass();
$c->func();
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *