是否可以在 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 变量的值。
谢谢。
已修改,原因是想要这样做
我想从我的脚本中提取“硬编码”,让用户能够在他们的站点中配置某些分类法。因此,在我这样做的同时,我还想创建一个准动态常量,我认为我可以稍后在脚本中对其进行解析。
如果做不到……那就做不到。
不要因为我问这个问题而开枪。
避免所有这些困惑的最后评论
我的问题的目的与 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;
如果我可以使用常量中的嵌入式 var 使其更流畅,我只是不想这样做。
最佳答案
正如其他用户指出的那样,这看起来真的很可疑。如果你愿意,你可以这样做:
define('WHO_AM_I', 'echo \'My name is \'.$_SESSION[\'who_am_i\'];');
eval(WHO_AM_I);
这将始终只回显变量。你需要评估一个表达式 afaik。
只需阅读您的编辑。我认为你会更适合 .ini 文件,或者可能是具有静态属性的静态类。使其更加灵活,并且您可以避免评估。你说的是我所看到的用户生成的内容 - 对其进行评估调用似乎非常不安全。
您可以使用的静态类的快速示例:
<?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');
关于php - 如何在 PHP 中解析常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14490408/