new static ,new self ,self::, $this的一些理解

白小二發表於2021-04-27

參考資料:PHP類中self和$this的區別

關於new static ,new self ,self:: $this的一些理解

self:類本身的指標,$this:物件本身的指標

  • self即類本身,類本身的靜態屬性及靜態方法是佔有記憶體的,self與$this指向的是不同的記憶體(即不共享任何屬性)本例中 self:: = Demo::

  • 以新物件為前提:new self($a) = new static($a) = $this;

程式碼

<?php
class Demo{
    public $a=1;
    public $b;
    public static $c = 1;
    public function __construct($a){
        $this->a = $a;
    }
    public function func(){
        echo new self(10) == new static(10);echo "\n";//1
        echo new self(10) == $this;//1
    }
    public function funct(){
        echo self::$c *= 200;echo "\n";
        echo Demo::$c *= 200;echo "\n";
    }

}
$demo = new Demo(10);
$demo->func();echo "\n";//全新物件對比,結果 1
$demo->funct();echo "\n";//self 對靜態屬性計算 200
$demo->func();echo "\n";//重新對比 結果 1
$demo2 = new Demo(10);
$demo2->funct();echo "\n"; //self 對靜態屬性計算 40000

結果

E:\server\wwwroot\php_frame_study>php test.php
1
1
200
40000

1
1
8000000
1600000000
本作品採用《CC 協議》,轉載必須註明作者和本文連結
保持專注

相關文章