3

在 php.net 手册页上define(),有一个用户提供的注释,建议您可以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()对数组的内容运行相同的循环,前提是循环和数组都在模块范围内。这也是从我的角度来看,预期的行为。)

那么,有人可以看看原始帖子并告诉我它是否真的有什么?还是作者说错了?

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

4

1 回答 1

7

示例功能有效。常量的范围是全局的。然而,这样做的原因是可疑的恕我直言。

于 2012-12-02T18:27:11.500 回答