サーチ…


備考

マジック定数は__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では、そうでなければ:


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow