static
使用static::对当前类进行静态引用时,代表的是运行时最初调用的类。static::不能对不属于方法的类的私有方法进行调用。
self
使用self::或者__class__对当前类进行静态引用时,代表的是当前方法所在的类。
this
该方法所从属的类的对象,PHP5中,如果是从第二个对象静态调用时,$this也可能引用的是另一个对象。PHP7中则没有此问题。
<?php
class A {
public static function who() {
echo __CLASS__."\n";
}
public static function test() {
static::who();
}
public static function bar(){
self::who();
}
private function foo(){
echo "A.foo\n";
}
public function testPrivate(){
$this->foo();
static::foo();
}
}
class B extends A {
public static function who() {
echo __CLASS__."\n";
}
}
class C extends A {
private function foo(){
echo "C.foo\n";
}
}
B::test();
B::bar();
$b=new B();
$b::test();
$b::bar();
$b->test();
$b->bar();
$c=new C();
$b->testPrivate();
$c->testPrivate();
?>