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 相关文章推荐
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
php设计模式之单例、多例设计模式的应用分析
Jun 30 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 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开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
js自定义事件代码说明
2011/01/31 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
Python运算符重载详解及实例代码
2017/03/07 Python
使用Python对MySQL数据操作
2017/04/06 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
python 负数取模运算实例
2020/06/03 Python
宝塔面板成功部署Django项目流程(图文)
2020/06/22 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
应届行政管理专业个人自我评价
2013/12/28 职场文书
学历公证书范本
2014/04/09 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
永远是春天观后感
2015/06/12 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书