在一个函数中使用PHP define()实际上对该函数的调用者有用吗?

Hep*_*tus 3 php scope constants function

在php.net手册页上define(),有一个用户提供的注释,表明您可以define()在函数内进行有用的调用.

轻描淡写,建议是创建一个这样的函数:

<?php  
function xdefine($a) {
  foreach($a as $k => $v)
    define($k, $v); 
}  
?>
Run Code Online (Sandbox Code Playgroud)

然后随后像这样使用它:

<?php
xdefine(array(
    "SECOND" => 1,
    "MINUTE" => 60,
    "HOUR" => 3600,
    "DAY" => 86400,
    "WEEK" => 604800,
    "MONTH" => 2592000, // 30 days month
    "YEAR" => 31536000,
    "LEAPYEAR" => 31622400
));
?>
Run Code Online (Sandbox Code Playgroud)

但是我的感觉和我的经验都是这不起作用:在xdefine()调用之后,每个标识符只是评估它自己的名字,而不是它xdefine()应该绑定到它的值.

原因对我来说似乎很明显(即因为符号得到它们的值,因为包含调用的模块xdefine()正在被解析/加载),但也许有一些我遗漏的微妙之处.这篇文章的作者使用一个可爱的Unicode字符命名他的功能有所不同,但我很确定这只是一个美学差异.

(顺便说一句,类似的东西的工作对我来说,如果我不这样定义一个函数xdefine(),而是仅仅运行相同的foreach()在数组的内容循环,条件是循环和数组是在模块范围内,这也是从我的角度来看,预期的行为.)

那么,有人可以看一下原帖并告诉我它是否真的有什么意义吗?或者作者是否错了?

(我将这个发布到引用的php.net页面,但我想如果我在这里发布它,我会更快地关注这个问题:-)

Rob*_*aca 7

示例函数有效.常量的范围是全局的.然而,这样做的原因是可疑的imho.