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 相关文章推荐
为查询结果建立向后/向前按钮
Oct 09 PHP
扩展你的 PHP 之入门篇
Dec 04 PHP
php xml文件操作实现代码(二)
Mar 20 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
Jun 15 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
Linux下php5.4启动脚本
Aug 03 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 PHP
php中get_object_vars()在数组的实例用法
Feb 22 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
CI框架给视图添加动态数据
2014/12/01 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
常用jQuery选择器总结
2014/07/11 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
java遇到微信小程序 "支付验证签名失败" 问题解决
2019/12/22 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
Python中max函数用法实例分析
2015/07/17 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
DNA测试:Orig3n
2019/03/01 全球购物
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
化学相关工作求职信
2013/10/02 职场文书
化工专业推荐信范文
2013/11/28 职场文书
分层教学实施方案
2014/03/19 职场文书
星级党支部申报材料
2014/05/31 职场文书
推广普通话标语
2014/06/27 职场文书
红旗渠导游词
2015/02/09 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
详解MySQL连接挂死的原因
2021/05/18 MySQL