PHP魔术常量探索与总结

[复习|验证|更新贴]

文档中位置:语言参考/常量/魔术常量

要点:(6)

1.      PHP中有7个魔术常量:__LINE__, __FILE__, __DIR__, __FUNCTION__, __CLASS__, __METHOD__, __NAMESPACE__

2.      特殊常量不区分大小写

3.      其值随着它们在代码中的位置改变而改变

4.      如果使用了名字空间,那么显示__FUNCION__,__CLASS__,__METHOD__时,前面会添加名字空间

5.      __FILE__ = dirname(__DIR__)

6.      __LINE__, __FILE__, __DIR__ 都和当前被包含脚本有关,而不是和包含脚本有关

验证:

目录结构

/hw006

         |--a.php

         |--b.php

在a.php中包含了b.php

a.php代码如下:

<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;"><?php
	namespace hw006a;	//defined a namespace
	
	//in a.php, deliberately use the "pure lowcase" and "mixture of lowcase and uppercase" ways
	echo "__FILE__:", __file__, "<br />";
	echo "__LINE__:", __Line__, "<br />";		//5
	echo "__DIR__:", __DIR__, "<br />";
	echo "__NAMESPCE__", __NAMESPACE__, "<br />";
	
	function testFunc(){
		echo "__FUNCTION__:", __FUNCTION__, "<br />";
		//if there is a namespace, it will show with the namespace
	}
	testFunc();

	class TestClass{
		function __construct(){
			echo "__CLASS__:", __CLASS__, "<br />";
			echo "__METHOD__:", __METHOD__, "<br />";
		}
	}
	new TestClass();
	
	/*require b.php*/
	echo "<hr />";
	require 'b.php';
?></span></span>

b.php代码如下

<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;"><?php
	namespace hw006b;		//defined a namespace

	echo "__FILE__:", __FILE__, "<br />";
	echo "__LINE__:", __LINE__, "<br />";		//5
	echo "__DIR__:", __DIR__, "<br />";
	echo "__NAMESPCE__", __NAMESPACE__, "<br />";
	
	function testFunc(){
		echo "__FUNCTION__:", __FUNCTION__, "<br />";
		//if there is a namespace, it will show with the namespace
	}
	testFunc();

	class TestClass{
		function __construct(){
			echo "__CLASS__:", __CLASS__, "<br />";
			echo "__METHOD__:", __METHOD__, "<br />";
		}
	}
	new TestClass();
?></span></span>

访问b.php结果如下:



图1-1


访问a.php结果如下:

 

图1-2

在a.php中,我使用了名字空间hw006a, 并且故意使用了魔术常量的小写模式、大小写混合模式。从图1-1的结果来看,验证了要点2,4的正确性

另外图1-1水平分割线以下的部分和图1-2验证了要点3,6的正确性

 

应用:

#1 魔术常量__FILE__或__DIR__ 结合$GLOBALS , DIRECTORY_SEPARATOR 以及函数define(),explode()等等

     可以总结出一套可复用的基于绝对路径的PHP文件包含机制(待完成[探索|代码复用贴])

#2 魔术常量 __FUNCTION__可以在递归函数中使用,以防止此递归函数改名时,修改大量代码。

 

[Changelogs]

2015/01/03 创建此贴,总结出魔术常量比较实用的6大要点,使用一个简单的示例验证了魔术常量的作用



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值