PHP的new static和new self的区别与使用


Posted in PHP onNovember 27, 2019

下面我们举个栗子:

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

new self

这里面注意这一行 get_class(Son::getStatic()); 返回的是 Son 这个 class, 可以总结如下:
self 返回的是 new self 中关键字 new 所在的类中,比如这里例子的 :

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

始终返回 Father。

new static

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
Oct 09 PHP
php实现递归与无限分类的方法
Feb 16 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
php提高网站效率的技巧
Sep 29 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 PHP
禁止直接访问php文件代码分享
May 05 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 #PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 #PHP
php 使用expat方式解析xml文件操作示例
Nov 26 #PHP
thinkphp框架类库扩展操作示例
Nov 26 #PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 #PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 #PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 #PHP
You might like
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
javascript OFFICE控件测试代码
2009/12/08 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
Python入门篇之对象类型
2014/10/17 Python
Django中使用group_by的方法
2015/05/26 Python
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
Python MD5加密实例详解
2017/08/02 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
半年思想汇报
2013/12/30 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
房产转让协议书
2014/04/11 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
运动会演讲稿300字
2014/08/25 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
2015年度企业工作总结
2015/05/21 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis