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应用技巧
Mar 27 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
php获取参数的几种方法总结
Feb 18 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
PHP简单日历实现方法
Jul 20 PHP
php+js实现裁剪任意形状图片
Oct 31 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 PHP
Yii2框架中一些折磨人的坑
Dec 15 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实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
js function定义函数使用心得
2010/04/15 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
python类参数self使用示例
2014/02/17 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
Python图片的横坐标汉字实例
2019/12/04 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
Python是什么 Python的用处
2020/05/26 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
求职意向书范文
2014/04/01 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js