我有一个看起来像这样的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可以回答这个问题,我会非常高兴。提前谢谢!
答案 0 :(得分:3)
if (defined('self::' . $name)) {
$name = constant('self::' . $name);
}
要动态检索常量,您需要使用constant
function。