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

时间:2012-12-02 18:19:20

标签: php function scope constants

define()的php.net手册页上,有user-contributed note表示您可以在函数中有用地调用define()

轻描述,建议创建一个这样的函数:

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

然后随后使用它:

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

但我的感觉和经验都表明这不起作用:在xdefine()调用之后,每个标识符只评估自己的名称,而不是xdefine()所谓的绑定值它。

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

(顺便说一下,如果我没有定义像xdefine()这样的函数,类似 的东西对我有用,而只是对内容运行相同的foreach()循环数组,只要循环和数组都在模块范围内。从我的角度来看,这也是预期的行为。)

那么,有人可以查看original post并告诉我它是否真的有什么意义吗?或者作者是否错了?

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

1 个答案:

答案 0 :(得分:6)

示例功能有效。 The scope of a constant is global。但是,这样做的原因是可疑的。