使用变量访问静态变量 - PHP

时间:2014-01-14 18:07:13

标签: php variables

我有这个PHP代码块 - :

$visible_to = 'private';
$icon = array('public' => 'ICON_GLOBE', 'private' => 'ICON_LOCK');
echo TbHtml::$icon[$visible_to];

但运行此打印 - :Access to undeclared static property: TbHtml::$icon

我的代码有问题吗?谢谢:))

继承TbHtml类 - :

class TbHtml
{
     const ICON_GLOBE = 'Its a globe';
     const ICON_LOCK = 'Its a lock';
}

3 个答案:

答案 0 :(得分:2)

人们正在投票给Mubo,但他的回答在我看来最接近正确。您不应该尝试使用动态部件调用类常量。为什么不这样做:

$visible_to = 'private';
$icon = array('public' => TbHtml::ICON_GLOBE, 'private' => TbHtml::ICON_LOCK);
echo $icon[$visible_to];

答案 1 :(得分:0)

你需要这样做:

echo TbHtml::${$icon[$visible_to]};

两个美元符号,以便您获得$ icon [$ visible_to]的值,并将其用作变量名称。

然而,这样的诡计是糟糕的代码。如果你做了类似这样的事情会更好的做法,你将图标存储在一个数组中,这样就不会将变量NAMES保存在$ icon数组中,而是保存它们的键:

class TbHtml
{
     const ICONS = array('GLOBE'=>'Its a globe', 'LOCK'=>'Its a lock')
}

$visible_to = 'private';
$icon = array('public' => 'GLOBE', 'private' => 'LOCK');
$visible_to_icon = $icon[$visible_to];
echo TbHtml::$globe[$visible_to_icon];

答案 2 :(得分:0)

您可以使用get_class_vars()来获取此信息:

$class_vars = get_class_vars('TbHtml');
$desired_value = $class_vars[$icon[$visible_to]];

如果你的课堂需要了解公共与私人,我建议你在课堂上公开一个静态的方法:

public static function get_icon_by_visibility($visibility = 'public') {
    if ($visibility === 'public') {
        return self::ICON_GLOBE;
    } else if ($visibility === 'private') {
        return self::ICON_LOCK;
    } else {
        throw new Exception('Invalid paramater passed.');
    }
}

// usage
echo TbHtml::get_icon_by_visibility($visible_to);