PHP面向对象中new self( )和 new static( ) 的区别

在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类。

class A {
    public static $_a = 'Class A';
    public static function echoProperty(){
        echo self::$_a . PHP_EOL;
    }
}
class B extends A {
    public static $_a = 'Class B';
}
$obj = new B();
B::echoProperty();//输出 Class A
因为使用self:: 或者__CLASS__对当前类的静态引用,取决于定义被调用方法所在的类,将上面Class A的方法echoProperty做一下修改变成:

class A {
    public static $_a = 'Class A';
    public static function echoProperty(){
        echo static::$_a . PHP_EOL;
    }
}
//再次调用B::echoProperty将输出   'CLASS B'
为了避免上面第一个例子中看到的子类重写父类的静态属性后,使用继承来的方法仍然访问父类的静态属性。
原文地址:https://www.cnblogs.com/chenyuphp/p/11771484.html