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
广告