PHP 魔術常量



PHP 中的魔術常量是預定義的常量。它們可用於任何執行它們的指令碼,並且它們的值會根據使用位置而改變。與在執行時解析的常規常量不同,所有這些“魔術”常量都在編譯時解析。

PHP 中有九個魔術常量。這些特殊常量不區分大小寫。

__LINE__

它返回檔案的當前行號。下面的示例顯示瞭如何使用此魔術常量。

<?php
   $x="Hello World";
   echo "$x. The current Line number is " . __LINE__ . ".";
?>

它將產生以下輸出

Hello World. The current Line number is 5.

__FILE__

此魔術常量返回檔案的完整路徑和檔名。如果在 include 內部使用,則返回包含檔案的檔名。檢視以下示例

<?php
   $x="Hello World";
   echo "$x. Current PHP script name is " . __FILE__ . ".";
?>

它將產生以下輸出

Hello World. Current PHP script name is C:\xampp\htdocs\hello.php.

__DIR__

此魔術常量返回檔案所在的目錄。如果在 include 內部使用,則返回包含檔案所在的目錄。這等效於 "dirname(__FILE__)”。此目錄名不包含尾部斜槓,除非它是根目錄。檢視以下示例

<?php
   $x="Hello World";
   echo "$x. Directory of the Current PHP script name is " . __DIR__ . ".";
?>

它將在瀏覽器上顯示以下輸出

Hello World. Directory of the Current PHP script name is C:\xampp\htdocs.

__FUNCTION__

此魔術常量返回使用該常量的函式名,或者對於匿名函式返回 {closure}。下面的示例顯示了它的工作方式:

<?php
   function hello(){    
      $x="Hello World";  
      echo "$x. The function name is ". __FUNCTION__ . "";   
   } 
   hello();   
?>

它將產生以下輸出

Hello World. The function name is hello

如果此魔術常量在函式外部使用,則將輸出為空。

__CLASS__

此常量返回類的名稱。類名包括其宣告所在的名稱空間。檢視以下示例

<?php
   class myclass {    
      public function __construct() {    
         echo "Inside the constructor of ". __CLASS__ . PHP_EOL;    
      }    
      function getClassName(){                      
         echo "from an instance method of " . __CLASS__ . "";   
      }    
   }    
   $obj = new myclass;    
   $obj->getClassName();    
?>

它將產生以下輸出

Inside the constructor of myclass
from an instance method of myclass

__METHOD__

__METHOD__ 常量返回類方法名。下面的示例顯示了它的工作方式:

<?php
   class myclass {    
      public function __construct() {    
         echo "Calling " . __METHOD__ . " of " . __CLASS__ ."<br>";
      }    
      function mymethod(){                      
         echo "Calling " . __METHOD__ . " of " . __CLASS__ ."";
      }    
   }    
   $obj = new myclass;    
   $obj->mymethod();
?>

它將產生以下輸出

Calling myclass::__construct of myclass
Calling myclass::mymethod of myclass

__TRAIT__

它返回特性名稱。特性名稱包括其宣告所在的名稱空間。在 PHP 中,特性是一種程式碼重用機制。特性類似於類,但僅用於以細粒度和一致的方式分組功能。不可能單獨例項化特性。

檢視以下示例

<?php
   trait mytrait {
      public function hello() {
         echo "Hello World from " . __TRAIT__ ."";
      }
   }
   class myclass {
      use mytrait;
   }
   $obj = new myclass();
   $obj->hello();
?>

它將產生以下輸出

Hello World from mytrait

__NAMESPACE__

此常量返回當前名稱空間的名稱。在 PHP 中,名稱空間允許我們在不同的上下文中使用相同名稱的類/函式/常量,而不會發生任何衝突,從而封裝這些項。名稱空間是根據類/函式的相關性對它們進行邏輯分組。

下面的示例顯示瞭如何使用此魔術常量:

<?php
   namespace myspace;
   class myclass {    
      public function __construct() {    
         echo "Name of the class: " . __CLASS__ . " in " . __NAMESPACE__ . ""; 
      }     
   }    
   $class_name = __NAMESPACE__ . '\myclass';    
   $a = new $class_name;   
?>

它將產生以下輸出

Name of the class: myspace\myclass in myspace

ClassName::class

與其他魔術常量不同,此魔術常量不以雙下劃線 (__ )開頭和結尾。它返回完全限定的類名。

下面的示例顯示瞭如何使用此魔術常量:

<?php
   namespace myspace;
   class myclass {    
      public function __construct() {    
         echo "Name of the class: " . myclass::class ;
      }     
   }
   use myspace;   
   $a = new myclass; 
?>

它將產生以下輸出

Name of the class: myspace\myclass
廣告