zoukankan      html  css  js  c++  java
  • PHP内部new self/new parent/new static/$this的差别

    <?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表示重新实例化了一个类

  • 相关阅读:
    最近很火的GAN应用
    pose项目里我遇到的问题
    pose的初体验
    Ubuntu 移动硬盘不能用
    深度学习中参数量与计算量的理解
    GAN的流程-cyclegan为例
    The version of SOS does not match the version of CLR you are debugging
    mnist 手写数字识别
    计算模型-图、数据模型-张量、运算模型-会话
    tensorflow环境安装
  • 原文地址:https://www.cnblogs.com/ywjcqq/p/13588181.html
Copyright © 2011-2022 走看看