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

参考资料: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 协议》,转载必须注明作者和本文链接
保持专注
白小二
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!