linux延迟绑定,php延迟绑定和非延迟绑定解析

php版本: php5.6

延迟绑定有: get_class($this), get_called_class(), new static(), static::

非延迟绑定有:get_class(), __CLASS__, new self(), self::

使用new static()时<?phpclass NewStatic{

//该类的实例

private $newStatic; //判断$newStatic是否为空,为空则实例化自身并存入$newStatic

public function init()

{

if (empty($this -> newStatic)) { $this -> newStatic = new static(); echo "该类已初始化";

} else { $this -> newStatic -> exec();

}

} //该类的执行方法

public function exec()

{

echo "该类NewStatic已执行";

}

}class Sub extends NewStatic{

//覆盖父类中的exec方法,用于区分

public function exec()

{

echo "该类Sub已执行";

}

}echo "

NewStatic的测试结果

";$newStatic = new NewStatic();echo "第一次执行初始化的结果:
";$newStatic -> init(); // 输出结果: 该类已初始化echo "
第二次执行初始化的结果:
";$newStatic -> init(); //输出结果: 该类NewStatic已执行echo "

NewStatic的子类Sub的测试结果

";$sub = new Sub();echo "第一次执行初始化的结果:
";$sub -> init(); // 输出结果: 该类已初始化echo "
第二次执行初始化的结果:
";$sub -> init(); //输出结果: 该类Sub已执行

将static替换为self<?phpclass NewStatic{

//该类的实例

private $newStatic; //判断$newStatic是否为空,为空则实例化自身并存入$newStatic

public function init()

{

if (empty($this -> newStatic)) { $this -> newStatic = new self(); //修改此处的static为self

echo "该类已初始化";

} else { $this -> newStatic -> exec();

}

} //该类的执行方法

public function exec()

{

echo "该类NewStatic已执行";

}

}class Sub extends NewStatic{

//覆盖父类中的exec方法,用于区分

public function exec()

{

echo "该类Sub已执行";

}

}echo "

NewStatic的测试结果

";$newStatic = new NewStatic();echo "第一次执行初始化的结果:
";$newStatic -> init(); // 输出结果: 该类已初始化echo "
第二次执行初始化的结果:
";$newStatic -> init(); //输出结果: 该类NewStatic已执行echo "

NewStatic的子类Sub的测试结果

";$sub = new Sub();echo "第一次执行初始化的结果:
";$sub -> init(); // 输出结果: 该类已初始化echo "
第二次执行初始化的结果:
";$sub -> init(); //输出结果: 该类NewStatic已执行 此处输出的结果发生了变化

结论:如果在子类中调用父类中含有new static()的方法时,它实例化子类,但是如果是父类中使用的是new self()的话,那么实例化的就是父类了,new self()永远指向定义的那个类,而new static()

会绑定调用时的那个类(延迟绑定)这就是new static()和new self()的区别。这个区别实际上跟static::和self::的区别是一样的,使用static::调用静态方法时调用的是延迟绑定后的类的静态方法,而self::指向定义的静态类的方法

另外要补充的一点new self()等同于如下写法:$class = get_class(); //注意:这里的get_class()里边没有传递参数$obj = new $class();

或者$class = __CLASS__;$obj = new $class();new static()等同于如下写法:$class = get_called_class();$obj = new $class();

或者$class = get_class($this); // 这里get_class()有没有传递参数效果是不一样的,跟这个函数本身的特性有关$obj = new $class();

相关推荐:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学linux需要关闭防火墙,一起学习linux 关闭防火墙命令

p>Linux还是比较常用的&#xff0c;于是我研究了一下Linux关闭防火墙命令&#xff0c;在这里拿出来和大家分享一下&#xff0c;希望你能学会Linux关闭防火墙命令 。1) 永久性生效&#xff0c;重启后不会复原开启&#xff1a; chkconfig iptables on关闭&#xff1a; chkconf…

linux centos7 r安装,如何在CentOS 7上安装R

R是一种快速增长的开源编程语言和免费环境&#xff0c;专门从事统计计算和图形表示。它得到R统计计算基金会的支持&#xff0c;主要由统计学家和数据挖掘人员用于开发统计软件和执行数据分析。本教程将教您如何在CentOS 7上安装R以及如何从官方综合R归档网络(CRAN)安装R软件包。…

C语言实践作业报告,c语言社会实践报告

资料简介c 语言社会实践报告c 语言社会实践报告随着个人素质的提升&#xff0c;越来越多的事务都会使用到报告&#xff0c;报告中提到的所有信息应该是准确无误的。 相信许多人会觉得报告很难写吧&#xff0c;下面是为大家的 c 语言社会报告&#xff0c;仅供参考&#xff0c;欢…

c语言程序设计电加热炉,基于80C52单片机的电加热数字恒温控制系统设计

1 控制方案设计温度场是一个梯度场&#xff0c;温度的上升或下降随时间缓慢变化。电加热炉温度控制过程可以用自然降温、程序升温和恒温保持3个分过程来描述。自然降温&#xff1a;停止加热&#xff0c;环境温度在整个过程中保持不变&#xff0c;受控温度场最终稳定为环境温度。…

c语言程序培训,编写简单的c语言程序(noi培训)

编写简单的C语言程序(NOI培训),刘汝佳,何为“简单”&#xff1f;,百度风格&#xff1a;简单可依赖简单不等于简陋我们的目标&#xff1a;用简单、直观、不容易出错的程序来完成任意复杂的功能&#xff0c;而不是把各种“高级的东西”堆砌在一起&#xff0c;然后把包括自己在内的…

c语言用链表编写简单程序,C语言单链表简单实现(简单程序复杂化)

PS: goto还是很好玩的。#include #include typedef struct _node{int value;struct _node *next;} Node;typedef struct _list{Node* head;}List;void add(List* plist,int number);void print(List* list);void deletel(List* list,int number);void freel(List* list);int ma…

C++语言程序设计上机指导(二级),C++语言程序设计上机指导(二级)

第1章 上机基础1.1 考试大纲1.2 考纲提示1.3 考试要求1.4 题型和分值1.5 考试环境1.6 上机操作步骤1.6.1 启动1.6.2 登录1.6.3 考试开始1.6.4 交卷第2章 C语言基础2.1 C语言概述2.1.1 C语言的基本符号2.1.2 C语言的词汇2.1.3 C程序的基本框架2.2 数据类型、表达式和基本运算2.2…

6s在c语言中的用法,C语言中assert的用法讲解

assert是指编写代码时做出一些假设&#xff0c;断言就是用于在代码中捕捉这些假设&#xff0c;可以将断言看作是异常处理的一种高级形式。下面是小编为大家整理的C语言assert的用法讲解&#xff0c;欢迎参考~assert宏的原型定义在中&#xff0c;其作用是如果它的条件返回错误&a…

cmd c语言 图形,CMD-C彩图隐写方案

1.前言本文提出了当前经典的彩图隐写方案&#xff0c;它具有聚类修改方向的特点&#xff0c;是第一个公认的彩色图隐写方案&#xff0c;为后续彩图隐写术和隐写分析工作提供了清晰的思路&#xff0c;具有深远的意义。2.背景现代灰度图像隐写方案是在最小化失真函数框架下设计的…

android 闪存软件测试,手机为什么这么卡:闪存I/O测试AndroBench

手机为什么这么卡&#xff1a;闪存I/O测试AndroBench软件名称&#xff1a;Androbench软件版本&#xff1a;4.0.1软件大小&#xff1a;1.01MB软件授权&#xff1a;免费适用平台&#xff1a;Android很多朋友买手机只是为了日常使用&#xff0c;卡顿是最影响日常使用的心情的问题了…

android 文件并发读写,Android下,rxJava+retrofit 并发上传文件和串行上传文件的效率为什么差不多?...

有个功能需要同时上传N个文件。代码如下&#xff1a;ApiService as ApiManager.getApiService();final ExecutorService es Executors.newFixedThreadPool(9);final int count Bimp.tempSelectBitmap.size();final CountDownLatch finishedLatch new CountDownLatch(count)…

android长按home键关闭程序,应用程序退出后Dialog弹出

FreeMusic新增功能1.按住Home键&#xff0c;back键&#xff0c;或recent键 弹出提示框难点&#xff1a;1.当应用程序退出的时候&#xff0c;dialog 依赖所在Activity的context&#xff0c;而应用程序退出的时候 Activity销毁&#xff0c;所以context随之销毁解决方案&#xff1…

android下挂串口中断,请大神看看为啥串口中断无法打断定时器中断

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#includesbit RSP2^6;sbit RWP2^5;sbit LCDNP2^7;sbit xiangP1^5;sbit ledP2^1;#define GPIO P0#define uchar unsigned char#define uint unsigned intunsigned char date1,aa,ee,k,flag;unsigned char code table[]"time ov…

android手机浏览器研究报告,QQ浏览器Android客户端产品体验报告

概览手机&#xff1a;魅族MX3操作系统&#xff1a;Flyme OS 3.5.2(A19220)体验产品&#xff1a;QQ浏览器Android客户端软件版本&#xff1a;5.7.2.1400需求分析目标人群&#xff1a;所有移动互联网网民使用场景&#xff1a;用户使用手机上网浏览网页、看小说、看视频、购物&…

android 音乐 数据库,android从数据库中取音乐数据

android从手机数据库中取音乐数据直接贴代码public void getMp3(){list new ArrayList<>();Cursor mAudioCursor this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,// 字段 没有字段 就是查询全部信息 相当于SQL语句中的 “ * ”…

labview利用簇模拟汽车控制_在LabVIEW应用程序中何时应采用面向对象技术 (翻译)...

在LabVIEW应用程序中何时应采用面向对象技术 (翻译)在LabVIEW中应用面向对象编程技术并不是一件特别容易的事情&#xff0c;尤其是先期的学习成本很高&#xff0c;但是在开发大型、复杂的、长期维护的程序时&#xff0c;使用面向对象技术会带来较好的回报。自从LabVIEW8.2版本引…

华gt2升级鸿蒙,华为手表GT2 Pro已开始内部测试,升级鸿蒙操作系统

据悉&#xff0c;华为鸿蒙应用已经开始在手表上布局。根据鸿蒙OS分布式计算的特点&#xff0c;它最终可以实现手机计算、手表优化显示、功能扩展和续航的需求。而华为WATCH GT2 Pro将成为华为首款支持鸿蒙应用的手表产品&#xff0c;不过要等到10月30日之后我们才能够购买到。在…

flutter 如何判断在哪个页面_Agora 教程:构建你的第一个 Flutter 视频通话应用

作者&#xff1a;张乾泽&#xff0c;声网Agora 工程师我们基于 Agora SDK 封装了 Agora Flutter SDK &#xff0c;开发者可以在 Flutter 应用中快速实现稳定、可靠的实时音视频通话、互动直播应用。本文将介绍如何使用 Agora Flutter SDK 快速构建一个简单的移动跨平台视频通话…

华为鸿蒙汽车自动驾驶,华为鸿蒙车机OS现身,自动驾驶再进化(一)

在2019年的上海车展上&#xff0c;华为首次公开宣布进入汽车领域。时隔一年多&#xff0c;在2020北京车展上我们将再次看到华为的身影。这一次&#xff0c;人们的疑问不再是“华为要干嘛”&#xff0c;而是变成了“华为干得怎么样了”。华为也用丰硕的成果给出了答案&#xff1…

.net core高并发_高并发下的Node.js与负载均衡

阅读本文约需要6分钟大家好&#xff0c;我是你们的导师&#xff0c;我每天都会在这里给大家分享一些干货内容(当然了&#xff0c;周末也要允许老师休息一下哈)。上次老师跟大家分享了下浅谈前端自动化构建的相关知识&#xff0c;今天跟大家分享浅谈前端自动化构建的相关知识参考…