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 相关文章推荐
PHP3 safe_mode 失效漏洞
Oct 09 PHP
利用static实现表格的颜色隔行显示的代码
Sep 02 PHP
PHP开发框架总结收藏
Apr 24 PHP
基于MySQL分区性能的详细介绍
May 02 PHP
php简单的留言板与回复功能具体实现
Feb 19 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
May 15 PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 PHP
关于laravel 子查询 & join的使用
Oct 16 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
浅谈php和.net的区别
2014/09/28 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
javascript实现简单的Map示例介绍
2013/12/23 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
微信小程序实现折叠展开效果
2018/07/19 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
JS实现简单日历特效
2020/01/03 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
python 获取et和excel的版本号
2009/04/09 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
详解supervisor使用教程
2017/11/21 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
浅析Python函数式编程
2018/10/06 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
个人自我评价和职业目标
2014/01/24 职场文书
网络程序员自荐信
2014/01/25 职场文书
2014年维稳工作总结
2014/11/18 职场文书
简历自我评价优缺点
2015/03/11 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL