サーチ…
備考
マジック定数は__CONSTANTNAME__
形式で区別されます。
現在、使用されている場所によって8つの魔法の定数が変わります。たとえば、 __LINE__
の値は、スクリプトで使用されている行によって異なります。
これらの特殊定数は大文字と小文字を区別しません。次のようになります。
名 | 説明 |
---|---|
__LINE__ | ファイルの現在の行番号。 |
__FILE__ | シンボリックリンクを含むファイルの絶対パスとファイル名が解決されました。インクルードの内部で使用された場合、インクルードされたファイルの名前が返されます。 |
__DIR__ | ファイルのディレクトリ。 includeの中で使用された場合、インクルードされたファイルのディレクトリが返されます。これはdirname(__FILE__) と同じです。このディレクトリ名には、ルートディレクトリ以外のスラッシュが付きません。 |
__FUNCTION__ | 現在の関数名 |
__CLASS__ | クラス名。クラス名には、宣言された名前空間が含まれます(例: Foo\Bar )。形質メソッドで使用される場合、 __CLASS__ は、形質が使用されるクラスの名前です。 |
__TRAIT__ | 形質の名前。特性名には、それが宣言された名前空間が含まれます(例: Foo\Bar )。 |
__METHOD__ | クラスメソッド名。 |
__NAMESPACE__ | 現在の名前空間の名前。 |
これらの定数の最も一般的な使用例は、デバッグとロギングです
__FUNCTION__と__METHOD__の違い
__FUNCTION__
は関数の名前だけを返しますが、 __METHOD__
は関数の名前とともにクラスの名前を返します。
<?php
class trick
{
public function doit()
{
echo __FUNCTION__;
}
public function doitagain()
{
echo __METHOD__;
}
}
$obj = new trick();
$obj->doit(); // Outputs: doit
$obj->doitagain(); // Outputs: trick::doitagain
__CLASS__、get_class()およびget_called_class()の違い
__CLASS__
マジック定数は、パラメータなしで呼び出されたget_class()
関数と同じ結果を返します。また、それらは定義されたクラスの名前(つまり、関数呼び出し/定数名を書き込んだ場所)を返します。
対照的に、 get_class($this)
とget_called_class()
関数が呼び出すと、インスタンス化された実際のクラスの名前が返されます。
<?php
class Definition_Class {
public function say(){
echo '__CLASS__ value: ' . __CLASS__ . "\n";
echo 'get_called_class() value: ' . get_called_class() . "\n";
echo 'get_class($this) value: ' . get_class($this) . "\n";
echo 'get_class() value: ' . get_class() . "\n";
}
}
class Actual_Class extends Definition_Class {}
$c = new Actual_Class();
$c->say();
// Output:
// __CLASS__ value: Definition_Class
// get_called_class() value: Actual_Class
// get_class($this) value: Actual_Class
// get_class() value: Definition_Class
ファイルとディレクトリの定数
現行ファイル
__FILE__
マジック定数を使って現在のPHPファイルの名前を絶対パスで取得することができます。これは、ロギング/デバッグ技術として最もよく使用されます。
echo "We are in the file:" , __FILE__ , "\n";
カレントディレクトリ
現在のファイルが置かれているディレクトリへの絶対パスを取得するには、 __DIR__
マジック定数を使用します。
echo "Our script is located in the:" , __DIR__ , "\n";
現在のファイルがあるディレクトリへの絶対パスを取得するには、 dirname(__FILE__)
使用します。
echo "Our script is located in the:" , dirname(__FILE__) , "\n";
現在のディレクトリを取得することは、PHPフレームワークがしばしばベースディレクトリを設定するために使用されます。
// index.php of the framework
define(BASEDIR, __DIR__); // using magic constant to define normal constant
// somefile.php looks for views:
$view = 'page';
$viewFile = BASEDIR . '/views/' . $view;
セパレータ
Windowsシステムは
/
inパスを完全に理解するので、DIRECTORY_SEPARATOR
は主にパスの解析時に使用されます。
マジック定数の他に、PHPはパスを扱うための固定定数をいくつか追加しています:
-
DIRECTORY_SEPARATOR
は、パス内のディレクトリを区切る定数です。値は/
on * nix、Windowsでは\
れます。ビュー付きの例は、次のように書き直すことができます。
$view = 'page';
$viewFile = BASEDIR . DIRECTORY_SEPARATOR .'views' . DIRECTORY_SEPARATOR . $view;
-
$PATH
環境変数でパスを区切るために、まれにPATH_SEPARATOR
定数を使用しました。そうです;
Windowsでは、そうでなければ: