zoukankan      html  css  js  c++  java
  • php new self()

    php里new self() 一般在类内部使用,作用是对自身类实例化

    <?php class test{

        public function __construct(){
            echo 'hello';
        }
        public function test2(){
            new self();
        }
    }
    test::test2();
    这个实例会输出hello


    后边发现还有个new static()方法,那这个跟new self()有什么区别呢,看代码说话:
    class fa {
        public function getfa1() {
            return new self();
        }
        public function getfa2() {
            return new static();
        }
    }
    $f = new fa();
    print get_class($f->getfa1());
    echo '<p>';
    print get_class($f->getfa2());

    get_class()方法是用于获取实例所属的类名

    输出:
    fa
    fa
    两个输出都一样,感觉没啥区别呀,后边突发奇想继承下再看看


    class er1 extends fa {
    }
    class er2 extends fa {
    }
    $er1 = new er1();
    $er2 = new er2();
    print get_class($er1->getfa1());
    echo '<br>';
    print get_class($er1->getfa2());
    echo '<br>';
    print get_class($er2->getfa1());
    echo '<br>';
    print get_class($er2->getfa2());
    输出:
    fa
    er1
    fa
    er2


    现在输出不一样了,明白new self()与new static()的区别了

    只有在继承中才能体现出来,如果没有任何继承,那么这两者是没有区别的,在继承中new self()返回的实例是自己所在的那个类,不管谁调用都是不变的,new static()是由调用者决定的

  • 相关阅读:
    borderInterpolate()函数
    cvtColor(src, src_gray, CV_BGR2GRAY)报错
    用OpenCV读取摄像头
    OpenCV的视频输入和相似度测量
    C++ main函数中参数argc和argv含义及用法
    OpenCV的视频读取
    MySql与Oracle的几个主要区别
    OLTP与OLAP的介绍(理论知识)
    IDEA激活
    short i =1; i=i+1与short i=1; i+=1的区别
  • 原文地址:https://www.cnblogs.com/qq254980080/p/9747410.html
Copyright © 2011-2022 走看看