• self:: 调用本类属性、方法;可以抑制方法多态性。
  • parent:: 调用父类属性、方法。
  • static:: 调用静态属性、方法;可以体现多态性。
  • $this-> 调用本实例的属性、方法;$this:: 可以调用静态属性、方法;但是无法在静态方法里使用;可以体现多态性。
  • -> object-operator, you always know you’re dealing with an instance.
  • :: scope-resolution-operator, you need more information about the context.
<?php
class A
{
    public static function newStaticClass()
    {
        return new static();
    }
    public static function newSelfClass()
    {
        return new self();
    }
    public function newThisClass()
    {
        return new $this();
    }
}

class B extends A
{
    public function newParentClass()
    {
        return new parent();
    }
}

class C extends B
{
    public static function newSelfClass()
    {
        return new self();
    }
}

$c = new C();

var_dump($c::newStaticClass()); // C and is same C::newStaticClass()
var_dump($c::newSelfClass()); // C because self now points to "C" class
var_dump($c->newThisClass()); // C
var_dump($c->newParentClass()); // A because parent was defined *way back* in class "B"

References