2011-03-10 29 views
2

我需要一种方法来访问一个类的静态变量使用变量作为类名。由于PHP处理静态方法和继承的方式,我需要访问变量本身而不是静态函数。在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如何处理静态方法,试图在类项目定义一个静态方法将总是返回“母”,而不是如果呼吁类子项目“儿童”的性质。

我假设有一种方法,但我的阅读没有提供任何使用。

回答

2

由于事实上,这条线:

// This won't work 
$value = $classname::$name; 

不应PHP 5.2工作,但工程与PHP 5.3:如果我在$value使用var_dump(),我得到以下结果

string 'child' (length=5) 


我认为你的答案就在这里:PHP 5.3;它会解决:

  • $classname::$name问题(quoting):

由于PHP 5.3.0的,它可能 参考使用变量的类。
变量的值不能是 关键字(例如self,parentstatic)。

  • ,它也应该解决“定义在类项目静态方法将总是返回‘父’,而不是‘孩子’”的问题,如果你使用的static代替self:使用PHP 5.3 ,static关键字具有新的含义 - 请参见Late Static Binding
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'));