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
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 PHP
PHP获取url的函数代码
Aug 02 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
php防注入及开发安全详细解析
Aug 09 PHP
浅谈PHP变量作用域以及地址引用问题
Dec 27 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
Jan 17 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
Feb 20 PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 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实现的简单日志写入函数
2015/03/31 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
JS监听事件的叠加和移除功能
2018/11/19 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
python代码xml转txt实例
2020/03/10 Python
骆驼官方商城:CAMEL
2016/11/22 全球购物
巴西购物网站:Estrela10
2018/12/13 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
环境科学专业个人求职信
2013/09/26 职场文书
市场拓展计划书
2014/05/03 职场文书
品德评语大全
2014/05/05 职场文书
预备党员转正考核材料
2014/06/03 职场文书
商铺门前三包责任书
2014/07/25 职场文书
ktv好的活动方案
2014/08/17 职场文书
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers