个性化阅读
专注于IT技术分析

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\program

D:\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 test

Hie

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__ 
JTP

base

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 
?>

输出

Example for ClassName::class 
Technical_Portal\srcmini

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


赞(0)
未经允许不得转载:srcmini » PHP魔术常量详解

评论 抢沙发

评论前必须登录!