我需要一种方法来使用变量作为类名来访问类的静态变量。由于PHP处理静态方法和继承的方式,我需要访问变量本身而不是静态函数。
class Item
{
public static $name = 'parent';
}
class SubItem extends item
{
public static $name = 'child';
}
$classname = 'SubItem';
// This won't work
$value = $classname::$name;
// This obviously won't work either. Not a function.
$value = call_user_func(array($classname, '$name'));
PHP处理静态方法的本质,尝试在类Item中定义静态方法,如果调用类SubItem,则总是返回“parent”而不是“child”。
我假设有一种方法,但我的阅读并没有提供任何有用的东西。
答案 0 :(得分:2)
事实上,这一行:
// This won't work
$value = $classname::$name;
不适用于PHP 5.2,但适用于PHP 5.3 :如果我在var_dump()
上使用$value
,我会得到以下结果
string 'child' (length=5)
我想你的答案就在这里:PHP 5.3;它会解决:
$classname::$name
问题(quoting):从PHP 5.3.0开始,它是可能的 使用变量引用类。
变量的值不能是a 关键字(例如self
,parent
和static
)。
static
而不是{ {1}}:使用PHP 5.3,static关键字具有新含义 - 请参阅Late Static Binding。答案 1 :(得分:0)
class Item
{
public static $name = 'parent';
public function getName(){
return static::$name;
}
}
class SubItem extends Item
{
public static $name = 'child';
}
$classname = 'SubItem';
$value = call_user_func(array($classname, 'getName'));