php - 如何在 PHP 中解析常量

标签 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 变量的值。

谢谢。

已修改,原因是想要这样做

我想从我的脚本中提取“硬编码”,让用户能够在他们的站点中配置某些分类法。因此,在我这样做的同时,我还想创建一个准动态常量,我认为我可以稍后在脚本中对其进行解析。

如果做不到……那就做不到。

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

避免所有这些困惑的最后评论

我的问题的目的与 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/

相关文章:

c# - 评估日期仅显示天数

javascript - (1, eval) ('this' ) vs eval ('this' ) 在 JavaScript 中?

php - PHP : @$_POST 中变量名前的“At”符号

php - 如何使用数据记录集格式化数组

指向从未成为 const 的 const 对象的 C++ 指针

c++ - 我如何在父类(super class)中使用 const 方法

r - 在 for 循环中创建新的 data.table 列未显示

php - 当我使用 get_query_var 时看到的随机字符串是什么?

php - MYSQL 错误,服务器消失了?

c++ - 在 C++ 中创建不可变对象(immutable对象)的更好方法