首页 > Web开发 > 详细

PHP内部new self/new parent/new static/$this的差别

时间:2020-08-31 10:44:28      阅读:91      评论:0      收藏:0      [点我收藏+]
<?php

error_reporting(E_ALL);

class Person
{
    public function getClass()
    {
        echo get_class($this).PHP_EOL;
        echo get_class(new self()).PHP_EOL;
        echo get_class(new static()).PHP_EOL;
        echo get_class(new parent()).PHP_EOL;
    }
}

$person = new Person();

$person->getClass();
  • 输出代码,可以看到new parent()报错,由于new parent实例化父类,目前Person不存在父类,所以报错

技术分享图片

<?php

error_reporting(E_ALL);

class Animal{

}

class Person extends Animal
{
    public function getClass()
    {
        echo get_class($this).PHP_EOL;
        echo get_class(new self()).PHP_EOL;
        echo get_class(new static()).PHP_EOL;
        echo get_class(new parent()).PHP_EOL;
    }
}

$person = new Person();

$person->getClass();
  •  当Person存在父类的时候,可以发现new parent()实例化的对象是Animal

技术分享图片

 

 

 

当存在继承关系时,new self所属于原始类,new static 所属于调用类

<?php

error_reporting(E_ALL);

class Animal{
    public function getClass()
    {
        echo get_class(new self()).PHP_EOL;
        echo get_class(new static()).PHP_EOL;
    }
}

class Person extends Animal
{

}

$person = new Person();

$person->getClass();

技术分享图片

  • $this 和 new self/new static的区别
    <?php
    
    error_reporting(E_ALL);
    
    class Animal{
    
        public $name = ‘Animal‘;
    
        public function getClass()
        {
            echo (new self())->name.PHP_EOL;
            echo $this->name.PHP_EOL;
        }
    }
    
    
    $person = new Animal();
    $person->name = ‘Person‘;
    
    $person->getClass();

    技术分享图片

     

     $this是所属类的一个引用,new self表示重新实例化了一个类

PHP内部new self/new parent/new static/$this的差别

原文:https://www.cnblogs.com/ywjcqq/p/13588181.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!