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

这将导致以下错误:

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

由于类和实例成员存在于不同的范围内,我发现这个错误有点出乎意料,我想知道它背后的动机。

ps 是否有其他具有相同限制的 OO 语言?

4

3 回答 3

1

您可以使用反射来挖掘它

如果您获得属性列表,它将具有其他标志,例如isStatic. 所以基本上属性必须是唯一的,无论它们是否是静态的。

于 2013-05-17T13:11:47.877 回答
1

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

于 2013-05-17T13:21:24.960 回答
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));
   }
}
于 2013-05-17T13:31:18.463 回答