PHP this、self与static的区别

/**
* 父类P中 获取子类C的类名
*/
class P
{
public static function getParent()
{
return self::class;
}

public static function getChild()
{
return static::class;
}

public function getClassName(){
echo __CLASS__; // 获取当前的类名
}

public function getThis(){
var_dump($this);
}
}

class C extends P
{

}

echo C::getParent(), PHP_EOL; // P
echo C::getChild(), PHP_EOL; // C
echo (new C())->getClassName(), PHP_EOL; // P
echo (new C())->getThis(), PHP_EOL; // C
/*
总结:
* 1.在 PHP 里,在没有继承时候,你用self::class 和 static::class是一样的,都是获取当前类名。
* 2.如果用到了继承,并且这个方法写在了父类里,你想要分别获取当前父类名和未知的子类名,就要按照下面的方法进行获取。
* 在 PHP 类中,self指向的是当前方法存在的这个类,也就是父类。static指向的是最终那个子类
* 3.this也有static的效果,只不过区别一个是非静态一个是静态
*/

  

posted @ 2020-03-12 10:30  PHPer100  阅读(882)  评论(0编辑  收藏  举报