• 技术文章 >后端开发 >php教程

    关于PHP new static 和 new self详解

    墨辰丷墨辰丷2018-05-25 11:14:44原创512
    使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类:使用 static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。

    最近在一个视频的评论被问到一个小问题:这里选择用static 而不是self有特殊的考虑么?或者我们可以这样转换一下问题:

    PHP 的 new static 和 new self 具体有什么?

    其实这个来看一个例子应该就很清晰了:

    class Father {
    
     public static function getSelf() {
      return new self();
     }
    
     public static function getStatic() {
      return new static();
     }
    }
    
    class Son extends Father {}
    
    echo get_class(Son::getSelf()); // Father
    echo get_class(Son::getStatic()); // Son
    echo get_class(Father::getSelf()); // Father
    echo get_class(Father::getStatic()); // Father

    这里面注意这一行 get_class(Son::getStatic()); 返回的是 Son 这个 class,可以总结如下:

    new self

    1.self返回的是 new self 中关键字 new 所在的类中,比如这里例子的 :

    public static function getSelf() {
      return new self(); // new 关键字在 Father 这里
     }

    始终返回 Father

    new static

    2.static 则上面的基础上,更聪明一点点:static 会返回执行 new static() 的类,比如 Son 执行 get_class(Son::getStatic()) 返回的是 Son, Father 执行 get_class(Father::getStatic()) 返回的是 Father

    而在没有继承的情况下,可以认为 new selfnew static是返回相同的结果。

    Tips: 可以用一个好的 IDE 来直接看注释。比如 PhpStorm:

    以上就是本文的全部内容,希望对大家的学习有所帮助。


    相关推荐:

    PHP中new self()与new static()的区别分析

    php中self与this的使用

    PHP 中 this self static 的区别

    以上就是关于PHP new static 和 new self详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:static self php
    上一篇:php 文件锁 简析 下一篇:PHP连接MySQL进行增、删、改、查操作的方法
    Web大前端开发直播班

    相关文章推荐

    • 详细解析PHP文件包含• php除了字符串首尾中英文空格 • Yii快速入门经典教程,yii快速入门教程_PHP教程• php开发中的页面跳转方法总结_PHP教程• yii框架网址解析问题_PHP教程

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网