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 相关文章推荐
PHP脚本数据库功能详解(上)
Oct 09 PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
php str_replace的替换漏洞
Mar 15 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
一个PHP的String类代码
Apr 20 PHP
php中通过虚代理实现延迟加载的实现代码
Jun 10 PHP
php结合curl实现多线程抓取
Jul 09 PHP
php+html5基于websocket实现聊天室的方法
Jul 17 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
PHP常用技巧汇总
Mar 04 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 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
咖啡豆分级制度 咖啡豆等级分类 咖啡豆是按口感分类的吗?
2021/03/05 新手入门
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
Vue插件之滑动验证码
2019/09/21 Javascript
js实现鼠标点击页面弹出自定义文字效果
2019/12/24 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
Python IDLE清空窗口的实例
2018/06/25 Python
python 用下标截取字符串的实例
2018/12/25 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
python基于Selenium的web自动化框架
2019/07/14 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
酒店出纳岗位职责
2013/12/29 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书