为什么PHP不允许类具有相同名称的类和实例成员?

时间:2013-05-17 13:05:54

标签: php oop

class Example {
   # Instance member 
   private $member;
   # Class member
   private static $member;
}

这会导致以下错误:

  

无法重新声明Example :: $ member in ...

由于类和实例成员生活在不同的范围内,我发现错误有点意外,我想知道它背后的动机。

P.S。是否有其他OO语言具有相同的限制?

3 个答案:

答案 0 :(得分:1)

您可以使用reflection

进行挖掘

如果获得属性列表,则会有其他标记,如isStatic。所以基本上属性必须是唯一的,无论它们是否是静态的。

答案 1 :(得分:1)

您也可以使用$this->name()访问静态函数,看起来很丑陋。也许这是一个原因。

答案 2 :(得分:1)

原因很简单:具有相同名称的静态和实例成员不明确。

例如,想象一下:

class Example {
   # Instance member 
   private $member;
   # Class member
   private static $member;

   public function AmbiguousCaller() {
       //What should be returned?
       return get_class_vars(get_class($this));
   }
}