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的FTP学习(三)
Oct 09 PHP
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
php 常用类整理
Dec 23 PHP
php str_pad() 将字符串填充成指定长度的字符串
Feb 23 PHP
php设计模式 Composite (组合模式)
Jun 26 PHP
PHP会员找回密码功能的简单实现
Sep 05 PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
实例讲解PHP表单处理
Feb 15 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 PHP
如何在PHP中使用数组
Jun 09 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初学者的8点有效建议
2010/11/20 PHP
php生成略缩图代码
2012/07/16 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
jquery UI 1.72 之datepicker
2009/12/29 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
js实现3D旋转相册
2020/08/02 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
python的Template使用指南
2014/09/11 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
python合并同类型excel表格的方法
2018/04/01 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
《问银河》教学反思
2014/02/19 职场文书
班主任寄语2015
2015/02/26 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android