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将mysql数据库整库导出生成sql文件的具体实现
Jan 08 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
PHP开发Apache服务器配置
Jul 15 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
Feb 19 PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 PHP
PHP切割汉字的常用方法实例总结
Apr 27 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
Aug 03 PHP
goto语法在PHP中的使用教程
Sep 17 PHP
PHP设计模式(观察者模式)
Jul 07 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
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
node后端服务保活的实现
2019/11/10 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
Python 函数返回值的示例代码
2019/03/11 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
Python调用Redis的示例代码
2020/11/24 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
linux面试相关问题
2013/04/28 面试题
班主任工作年限证明
2014/01/12 职场文书
伊琍体标语
2014/06/25 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
python获取字符串中的email
2022/03/31 Python