PHP:变量的常量名称

时间:2014-07-16 15:11:52

标签: php

我有一个看起来像这样的PHP类

class Painter {
    const COLOR_PHYSIC = 'brown';
    const COLOR_PSYCHIC = 'purple';
    const COLOR_ATTACKER = 'dodgerblue';
    const COLOR_DEFENDER = 'darkorange';

    public function __call($name, $arguments) {
        if(defined('self::'.$name)) $name = self::$$name;

        return '<span class="'.$name.'">'.$arguments[0].'</span>';
    }
}

返回字符串的彩色html表示。用法示例:

$painter->red('Text'); // <span class="red">Text</span>

如果存在这样的必要性,我还希望将来可以更改一些预设颜色,这就是我被卡住的地方。

如果我运行此行

$painter->COLOR_DEFENDER('Text');

我收到错误消息

  

访问未声明的静态属性:Painter :: $ COLOR_DEFENDER

如何修改代码,以便$name可以解释为常量?

另外在旁注中,我很想知道,如果我要将预设颜色的存储方法更改为数组而不是常量,那么会使用更少的内存吗?如果有人更熟悉引擎盖下的PHP可以回答这个问题,我会非常高兴。提前谢谢!

1 个答案:

答案 0 :(得分:3)

if (defined('self::' . $name)) {
    $name = constant('self::' . $name);
}

要动态检索常量,您需要使用constant function