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/
作者
puresai
许可协议