这里有一个重要的概念就是scope,如果子类没有overrided父类的属性或方法,那么那个属性或方法的scope就还是父类的。
样例代码如下:
<?php
class A {
public static $v;
public static function setV($value) {static::$v = $value;}
public static function setV2($value) {self::$v = $value;}
}
class B extends A{
public static $v;
};
class C extends A{};
class D extends B{};
A::setV('a');
C::setV('c');
B::setV('b');
var_dump(B::$v);
var_dump(A::$v);
var_dump(C::$v);
var_dump(D::$v);
// output:
// string(1) "b"
// string(1) "c"
// string(1) "c"
// string(1) "b"
在这里,即使是用C::setV()
,改变的还是A的属性。因为C的$v
就是A的$v
。
网友评论