是否可以在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;
我只是不想这样做,如果我可以使用常量中的嵌入变量使其更光滑。
答案 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)