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伪造referer突破网盘禁止外连的代码
Jun 15 PHP
PHP中$_SERVER的详细参数与说明
Jul 29 PHP
php图片上传存储源码并且可以预览
Aug 26 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
php去掉URL网址中带有PHPSESSID的配置方法
Jul 08 PHP
详解PHP中的Traits
Jul 29 PHP
php简单生成随机数的方法
Jul 30 PHP
Yii2语言国际化自动配置详解
Aug 22 PHP
PHP实现对数字分隔加千分号的方法
Mar 18 PHP
PHP实现的抓取小说网站内容功能示例
Jun 27 PHP
laravel 使用auth编写登录的方法
Sep 30 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编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
jQuery实现增删改查
2020/12/22 jQuery
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
python服务器端收发请求的实现代码
2014/09/29 Python
python通过线程实现定时器timer的方法
2015/03/16 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
python ftplib模块使用代码实例
2019/12/31 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
高三语文教学反思
2014/01/15 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
门面房租房协议书
2014/12/01 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
个人优缺点总结
2015/02/28 职场文书
感谢信的技巧及范例
2019/05/15 职场文书