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 操作符与控制结构
Mar 07 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
Sep 29 PHP
php图片的二进制转换实现方法
Dec 15 PHP
php通过array_merge()函数合并关联和非关联数组的方法
Mar 18 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
PHP反射机制原理与用法详解
Feb 15 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 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防止SQL注入详解及防范
2013/11/12 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python+Opencv识别两张相似图片
2020/03/23 Python
深入理解Python对Json的解析
2017/02/14 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
Python os模块常用方法和属性总结
2020/02/20 Python
Python序列化pickle模块使用详解
2020/03/05 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
西安众合通用.net笔试题
2013/03/18 面试题
职业技术学校毕业生推荐信
2013/12/03 职场文书
海飞丝广告词
2014/03/20 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python