PHPPHP编程it互联网

PHP static:: - 后期绑定的注意事项

2015-06-09  本文已影响57人  Kumiko

这里有一个重要的概念就是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

上一篇下一篇

猜你喜欢

热点阅读