self和static
PHP官方也说过,大概是说self调用的就是本身代码片段这个类,而static调用的是从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。
class A
{
protected static $str = "This is class A";
public static function getStr()
{
echo self::$str;
}
}
class B extends A
{
protected static $str = "This is class B";
}
B::getStr();// 输出This is class A
class A
{
protected static $str = "This is class A";
public static function getStr()
{
echo static::$str;
}
}
class B extends A
{
protected static $str = "This is class B";
}
B::getStr();// 输出This is class B
self - 就是这个类,是代码段里面的这个类。
static - PHP 5.3新特性。当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。
class A
{
public function getSelf()
{
return new self();
}
public function getStatic()
{
return new static();
}
}
$f = new A();
print get_class($f->getSelf());
print get_class($f->getStatic());
class B extends A{
public function getSelf2()
{
return new self();
}
public function getStatic2()
{
return new static();
}
}
$f = new B();
print get_class($f->getSelf());
print get_class($f->getStatic());
print get_class($f->getSelf2());
print get_class($f->getStatic2());// 输出AAABBB
self和static
https://blog.puresai.com/2017/12/07/142/