我有这个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';
}
答案 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);