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 相关文章推荐
服务器端解压缩zip的脚本
Dec 22 PHP
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
url decode problem 解决方法
Dec 26 PHP
php笔记之:有规律大文件的读取与写入的分析
Apr 26 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
yii实现创建验证码实例解析
Jul 31 PHP
PHP工程师VIM配置分享
Dec 15 PHP
php封装的表单验证类完整实例
Oct 19 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
php取出数组单个值的方法
Mar 12 PHP
Laravel框架生命周期与原理分析
Jun 12 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
基于mysql的论坛(3)
2006/10/09 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
python 简易计算器程序,代码就几行
2009/08/29 Python
python算法学习之计数排序实例
2013/12/18 Python
Python解析树及树的遍历
2016/02/03 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
基于python实现复制文件并重命名
2020/09/16 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
购买大码女装:Lane Bryant
2016/09/07 全球购物
职工运动会邀请函
2014/02/02 职场文书
婚礼司仪主持词
2014/03/14 职场文书
初三学生个人自我评定
2014/04/06 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
导游欢送词
2015/01/31 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书