ここでは、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();