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
PHP4(windows版本)中的COM函数
Oct 09 PHP
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
详解PHP显示MySQL数据的三种方法
Jun 05 PHP
php 保留小数点
Apr 21 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
php检测图片主要颜色的方法
Jul 01 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
PHP内置加密函数详解
Nov 20 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 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在线生成二维码代码(google api)
2013/06/03 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
php的常量和变量实例详解
2017/06/27 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
详解Python学习之安装pandas
2019/04/16 Python
通过自学python能找到工作吗
2020/06/21 Python
Python如何输出警告信息
2020/07/30 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
解释下面关于J2EE的名词
2013/11/15 面试题
事业单位请假制度
2014/01/13 职场文书
村委会贫困证明范文
2014/09/21 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python