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 Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
php while循环得到循环次数
Oct 26 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
php使用get_class_methods()函数获取分类的方法
Jul 20 PHP
php获取服务器操作系统相关信息的方法
Oct 08 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
PHP正则表达式之RCEService回溯
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/02 无线电
PHP 常见郁闷问题答解
2006/11/25 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
Python内建数据结构详解
2016/02/03 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
浅析python协程相关概念
2018/01/20 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
python通过cython加密代码
2020/12/11 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
计算机专业大学生的自我评价
2013/11/14 职场文书
成考报名单位证明范本
2014/01/16 职场文书
市场营销大学生职业规划书
2014/02/25 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
2014年小学体育工作总结
2014/12/11 职场文书