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 全局变量范围分析
Aug 07 PHP
php getsiteurl()函数
Sep 05 PHP
PHP中使用gettext来支持多语言的方法
May 02 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
php递归遍历多维数组的方法
Apr 18 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
thinkphp分页实现效果
Oct 13 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
Dec 23 PHP
yii2 commands模式以及配置crontab定时任务的方法
Aug 19 PHP
laravel框架中控制器的创建和使用方法分析
Nov 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多线程抓取网页实现代码
2010/07/22 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
jquery实现点击TreeView文本父节点展开/折叠子节点
2013/01/10 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python的urllib模块显示下载进度示例
2014/01/17 Python
Python中集合类型(set)学习小结
2015/01/28 Python
Python Web框架Tornado运行和部署
2020/10/19 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
Python最小二乘法矩阵
2019/01/02 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
构造方法和其他方法的区别
2016/04/26 面试题
晚会主持词开场白
2014/03/17 职场文书
暑假家长评语大全
2014/04/17 职场文书
护士医德医风自我评价
2014/09/15 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
导游词之介休绵山
2019/12/31 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL