如何在PHP中解析常量

时间:2013-01-23 22:15:05

标签: php constants eval

是否可以在PHP中解析常量的内容?

例如,

define('WHO_AM_I', 'My name is $_SESSION['who_am_i'].'); // setup the constant string
echo eval(WHO_AM_I); // something like this -- but the eval() returns an error

请注意,在我稍后在脚本流中使用常量之前,我不知道_SESSION var的值。

感谢。

因为想要这样做而修改

我想从我的脚本中提取“硬编码”,并让用户能够在他们的网站中配置某些分类。所以当我这样做时,我也想创建一个准动态常量,我以为我可以稍后在脚本中进行解析。

如果无法完成......则无法完成。

不要因为问这个问题而开枪。

最后的评论,以避免所有这种混乱

我的问题的目的与eval()函数无关。我实际上后悔当时把它放在那里。

我把eval()放在问题中只是为了向stackoverflow成员展示我做了一点如果准备好我的问题而不是问一个开放的结果 - 嘿给我一个解决方案,而不是自己提供任何刺。所以请忽略eval()。

我想知道的是,我能以某种方式制作一个define(),使得我的脚本稍后可以解析赋值。就是这样,就是这样。

修订C

我知道我可以做以下事情虽然我不想这样做:

define('PARSE_ABLE_CONSTANT_PART_A', 'My name is ');
define('PARSE_ABLE_CONSTANT_PART_B', '.');

......后来在剧本之路......

echo PARSE_ABLE_CONSTANT_PART_A . $_SESSION['who_am_i'] . PARSE_ABLE_CONSTANT_PART_B;

我只是不想这样做,如果我可以使用常量中的嵌入变量使其更光滑。

2 个答案:

答案 0 :(得分:2)

正如其他用户所指出的那样,这看起来真的很可疑。如果你愿意,你可以这样做:

define('WHO_AM_I', 'echo \'My name is \'.$_SESSION[\'who_am_i\'];');
eval(WHO_AM_I);

这将始终只是回显变量。你需要评估一个表达式。

只需阅读您的修改。我认为你更适合使用.ini文件,或者可能是具有静态属性的静态类。使它更灵活,你避免使用eval。你正在谈论我所看到的用户生成的内容 - 将其置于eval调用之下似乎非常不安全。

您可以使用的静态类的快速示例:

<?php
class myConstants{
  public static function _($key){
    switch($key){
      case "WHO_AM_I":
        return "My name is ".$_SESSION['who_am_i'];
        break;
      case "OTHER_CONSTANT":
        // does some other evaluation and returns a string
        break;
    }
    throw new Exception("Constant isn't defined");
  }
}
?>

然后你可以echo myConstants::_('WHO_AM_I');

答案 1 :(得分:1)

根据定义,常量不允许您使用动态内容进行设置。

以下是php手册的引用:

  

顾名思义,该值在执行期间不会改变   脚本

您可以通过here

了解更多信息

您可能会想到magical constants