php中受保护的静态属性和继承的怪异行为


weird behaviour with protected static properties and inheritance in php

我在php中遇到静态成员和继承问题

为什么这样做:

class A {
   public static function me() {
     echo static::$b;
   }
}
class B extends A
{
 protected static $b = "hello";
}
B::me();

而这不是????:

class A {
   public static function me() {
     echo static::$b;
   }
}
class B extends A
{
 private static $b = "hello";
}
B::me();

我知道我指的是A上下文中的变量$b但为什么我可以访问受保护的成员,而不能访问私人成员?非常感谢。

看。private仅用于类本身,而protected用于族。难怪$b在A中是不可访问的,如果你为b声明private,无论b从A继承。另一方面,如果你声明protected,A也可以访问它,因为它属于b的族。