📜  PHP的magic常量

📅  最后修改于: 2020-09-26 03:53:28             🧑  作者: Mango

魔术常数

魔术常量是PHP中预定义的常量,它们会根据使用情况进行更改。它们以双下划线(__)开头,并以双下划线结尾。

它们与其他预定义常量相似,但是随着它们随上下文更改其值,它们称为魔术常量。

PHP中有九个魔术常数。其中八个魔术常数以双下划线(__)开头和结尾。

  • __LINE__
  • __FILE__
  • __DIR__
  • __FUNCTION__
  • __CLASS__
  • __TRAIT__
  • __METHOD__
  • __NAMESPACE__
  • ClassName :: class

与常规常量不同,所有常量都在编译时而不是运行时解析。魔术常数不区分大小写。

变更日志

Version Description
5.3.0 Added __DIR__ and __NAMESPACE__ magic constant
5.4.0 Added __TRAIT__ magic constant
5.5.0 Added ::class magic constant

以下示例代码定义了所有常量:

1. __LINE__

它返回使用此常量的文件的当前行号。

例:

Example for __LINE__";  
// print Your current line number i.e;4   
echo "You are at line number " . __LINE__ . "

"; ?>

输出:

Example for __LINE__

You are at line number 4

2. __FILE__:

该魔术常数返回执行文件的完整路径,该文件存储在该路径中。如果在包含中使用它,则返回包含文件的名称。

例:

Example for __FILE__";  
//print full path of file with .php extension  
echo __FILE__ . "

"; ?>

输出:

Example for __FILE__

D:\xampp\htdocs\program\magic.php

3. __DIR__:

它返回执行文件的完整目录路径。此魔术常数返回的路径等效于dirname(__FILE__)。除非它是根目录,否则此魔术常数不带斜杠。

例:

Example for __DIR__";  
//print full path of directory where script will be placed  
echo __DIR__ . "

"; //below output will equivalent to above one. echo dirname(__FILE__) . "

"; ?>

输出:

Example for __DIR__

D:\xampp\htdocs\program D:\xampp\htdocs\program

4. __功能__:

该魔术常数返回使用该常数的函数名称。如果在任何函数之外使用它,它将返回空白。

例:

Example for __FUNCTION__";  
//Using magic constant inside function.  
function test(){  
//print the function name i.e; test. 
echo 'The function name is '. __FUNCTION__ . "

"; } test(); //Magic constant used outside function gives the blank output. function test_function(){ echo 'Hie'; } test_function(); //give the blank output. echo __FUNCTION__ . "

"; ?>

输出:

Example for __FUNCTION__

The function name is test Hie

5. __CLASS__:

它返回使用该魔术常数的类名。__CLASS__常量也可用于特征。

例:

Example for __CLASS__";  
class JTP  
{  
public function __construct() {  
;  
}  
function getClassName(){  
//print name of the class JTP. 
echo __CLASS__ . "

"; } } $t = new JTP; $t->getClassName(); //in case of multiple classes class base { function test_first(){ //will always print parent class which is base here. echo __CLASS__; } } class child extends base { public function __construct() { ; } } $t = new child; $t->test_first(); ?>

输出:

Example for __CLASS__

JTP base

6 .__ TRAIT__:

这个魔术常数返回使用它的特征名称。

例:

Example for __TRAIT__";  
trait created_trait {  
function jtp(){  
//will print name of the trait i.e; created_trait  
echo __TRAIT__;
}  
}  
class Company {  
use created_trait;  
}  
$a = new Company;  
$a->jtp();  
?>

输出:

Example for __TRAIT__

created_trait

7 .__方法__:

它返回包含此魔术常数的类方法的名称。返回的方法名称与声明的名称相同。

例:

Example for __METHOD__";
class method {  
public function __construct() {  
//print method::__construct  
echo __METHOD__ . "

"; } public function meth_fun(){ //print method::meth_fun echo __METHOD__; } } $a = new method; $a->meth_fun(); ?>

输出:

Example for __METHOD__

method:: construct method:: meth_fun

8. __NAMESPACE__:

它返回使用它的当前名称空间。

例:

Example for __NAMESPACE__";
class name {  
public function __construct() {  
echo 'This line will print on calling namespace.';   
}   
}  
$class_name = __NAMESPACE__ . '\name';  
$a = new class_name; 
?>

输出:

Example for __NAMESPACE__

This line will print on calling namespace.

9. ClassName :: class:

此魔术常数不会以双下划线(__)开头和结尾。它返回ClassName的完全限定名称。在PHP5.5.0中添加了ClassName::class。这对命名空间类很有用。

例:

Example for CLASSNAME::CLASS ";
class javatpoint {  
}
echo javatpoint::class;    //ClassName::class 
?>

输出:

Example for ClassName::class

Technical_Portal\javatpoint

注意:请记住,命名空间必须是脚本中的第一个语句或在任何声明调用之后,否则它将产生致命错误。