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#