PHP魔术常量详解

魔术常量是PHP中预定义的常量, 它们会根据使用情况进行更改。它们以双下划线(__)开头, 并以双下划线结尾。
它们与其他预定义常量相似, 但是随着它们随上下文更改其值, 它们称为魔术常量。
PHP中有九个魔术常数。其中八个魔术常数以双下划线(__)开头和结尾。

  1. __LINE__
  2. __FILE__
  3. __DIR__
  4. __FUNCTION__
  5. __CLASS__
  6. __TRAIT__
  7. __METHOD__
  8. __NAMESPACE__
  9. ClassName :: class
与常规常量不同, 所有常量都在编译时而不是运行时解析。魔术常数不区分大小写。
变更日志
Version Description
5.3.0 添加了__DIR__和__NAMESPACE__魔术常数
5.4.0 增加了__TRAIT__魔术常数
5.5.0 添加了:: class魔术常数
以下示例代码定义了所有常量:
1. __LINE__
它返回使用该常数的文件的当前行号。
例:
< ?php echo "< h3> Example for __LINE__< /h3> "; // print Your current line number i.e; 4 echo "You are at line number " . __LINE__ . "< br> < br> "; ?>

输出
Example for __LINE__ You are at line number 4

2. __FILE__:
这个魔术常数返回执行文件的完整路径, 该文件存储在该路径中。如果在include中使用它, 则返回包含文件的名称。
例:
< ?php echo "< h3> Example for __FILE__< /h3> "; //print full path of file with .php extension echo __FILE__ . "< br> < br> "; ?>

输出
Example for __FILE__ D:\xampp\htdocs\program\magic.php

3. __DIR__:
它返回已执行文件的完整目录路径。此魔术常数返回的路径等效于dirname(__ FILE__)。除非它是根目录, 否则此魔术常数没有斜杠。
例:
< ?php echo "< h3> Example for __DIR__< /h3> "; //print full path of directory where script will be placed echo __DIR__ . "< br> < br> "; //below output will equivalent to above one. echo dirname(__FILE__) . "< br> < br> "; ?>

输出
Example for __DIR__ D:\xampp\htdocs\programD:\xampp\htdocs\program

4. __FUNCTION__:
这个魔术常数返回使用该常数的函数名称。如果在任何功能之外使用它, 它将返回空白。
例:
< ?php echo "< h3> Example for __FUNCTION__< /h3> "; //Using magic constant inside function. function test(){ //print the function name i.e; test. echo 'The function name is '. __FUNCTION__ . "< br> < br> "; } test(); //Magic constant used outside function gives the blank output. function test_function(){ echo 'Hie'; } test_function(); //give the blank output. echo__FUNCTION__ . "< br> < br> "; ?>

输出
Example for __FUNCTION__ The function name is testHie

5. __CLASS__:
它返回使用该魔术常数的类名。 __CLASS__常量也可用于特征。
例:
< ?php echo "< h3> Example for __CLASS__< /h3> "; class JTP { public function __construct() { ; } function getClassName(){ //print name of the class JTP. echo __CLASS__ . "< br> < br> "; } } $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__ JTPbase

6 .__TRAIT__:
这个魔术常数返回使用它的特征名称。
例:
< ?php echo "< h3> Example for __TRAIT__< /h3> "; 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 .__METHOD__:
它返回包含此魔术常数的类方法的名称。返回的方法名称与声明的名称相同。
例:
< ?php echo "< h3> Example for __METHOD__< /h3> "; class method { public function __construct() { //print method::__construct echo __METHOD__ . "< br> < br> "; } 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__:
它返回使用它的当前名称空间。
例:
< ?php echo "< h3> Example for __NAMESPACE__< /h3> "; 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的完全限定名称。在PHP 5.5.0中添加了ClassName :: class。这对命名空间类很有用。
例:
< ?php namespace Technical_Portal; echo "< h3> Example for CLASSNAME::CLASS < /h3> "; class srcmini { } echo srcmini::class; //ClassName::class ?>

【PHP魔术常量详解】输出
Example for ClassName::class Technical_Portal\srcmini

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

    推荐阅读