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 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
PHP中输出转义JavaScript代码的实现代码
Apr 22 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
php多文件上传下载示例分享
Feb 20 PHP
PHP小教程之实现双向链表
Jun 12 PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 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概述.
2006/10/09 PHP
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
php实现文件下载实例分享
2014/06/02 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
JavaScript之编码规范 推荐
2012/05/23 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
Python中的闭包实例详解
2014/08/29 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
简述python&pytorch 随机种子的实现
2020/10/07 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
C++面试题目
2013/06/25 面试题
公司经理聘任书
2014/03/29 职场文书
母校寄语大全
2014/04/10 职场文书
公司建议书怎么写
2014/05/15 职场文书
党小组推荐意见
2015/06/02 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang
用python画城市轮播地图
2021/05/28 Python