网上关于静态属性和方法的继承问题,答案千奇百怪,干脆直接代码试了下:
class Base
{
public static $var = 'var';
public static function testStaticFun()
{
echo 'func';
}
}
class A extends Base
{
public function testSelf()
{
echo self::$var;
}
public function testParent()
{
echo parent::$var;
}
public function setSelf()
{
self::$var = 'self';
}
public function setParent()
{
parent::$var = 'parent';
}
public static function testStaticFun()
{
parent::testStaticFun();
echo 'over';
}
}
$objA = new A();
$objA->testSelf(); // var
$objA->testParent(); // var
$objA->setSelf();
$objA->testSelf(); // self
$objA->testParent(); // self
echo Base::$var; // self
$objA->setParent();
$objA->testSelf(); // parent
$objA->testParent(); // parent
echo Base::$var; // parent
Base::testStaticFun(); // func
A::testStaticFun(); // func over
所以 php 中静态的继承究竟是什么情况?是不是和其他语言比如 java 在静态继承的行为上有区别?父类的静态属性和方法会不会被覆盖?继承之后静态属性是不是只有一份?继承实现的原理是什么?