php new static,PHP中new self()和new static()的区别用法

浅谈PHP中new self()和new static()的区别

本文介绍了PHP中new self()和new static()的区别,分享给大家,也给自己留个笔记。

1.new static()是在PHP5.3版本中引入的新特性。

2.无论是new static()还是new self(),都是new了一个新的对象。

3.这两个方法new出来的对象有什么区别呢,说白了就是new出来的到底是同一个类实例还是不同的类实例呢?

为了探究上面的问题,我们先上一段简单的代码:

class Father {

public function getNewFather() {

return new self();

}

public function getNewCaller() {

return new static();

}

}

$f = new Father();

print get_class($f->getNewFather());

print get_class($f->getNewCaller());

注意,上面的代码get_class()方法是用于获取实例所属的类名。

这里的结果是:无论调用getNewFather()还是调用getNewCaller()返回的都是Father这个类的实例。

打印的结果为:FatherFather

到这里,貌似new self()和new static()是没有区别的。我们接着往下走:

class Sun1 extends Father {

}

class Sun2 extends Father {

}

$sun1 = new Sun1();

$sun2 = new Sun2();

print get_class($sun1->getNewFather());

print get_class($sun1->getNewCaller());

print get_class($sun2->getNewFather());

print get_class($sun2->getNewCaller());

看上面的代码,现在这个Father类有两个子类,由于Father类的getNewFather()和getNewCaller()是public的,所以子类继承了这两个方法。

打印的结果是:FatherSun1FatherSun2

我们发现,无论是Sun1还是Sun2,调用getNewFather()返回的对象都是类Father的实例,而getNewCaller()则返回的是调用者的实例。

即$sun1返回的是Sun1这个类的实例,$sun2返回的是Sun2这个类的实例。

现在好像有点明白new self()和new static()的区别了。

首先,他们的区别只有在继承中才能体现出来,如果没有任何继承,那么这两者是没有区别的。

然后,new self()返回的实例是万年不变的,无论谁去调用,都返回同一个类的实例,而new static()则是由调用者决定的。

上面的$sun1->getNewCaller()的调用者是$sun1对吧!$sun1是类Sun1的实例,所以返回的是Sun1这个类的实例,$sun2同样的道理就不赘述了。

好了,关于PHP中new self()和new static()的区别就暂时说这么多,希望对读者的理解有所帮助,如果有不对的地方欢迎拍砖扔蛋。也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

您可能感兴趣的文章:

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

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

相关文章

php微信开源框架,SOPHP免费微信开源框架 php版 v4.5

SOPHP是一款稳定开源的微信公众平台开发系统,也是基于weiphp开发的第一款商业系统。依托自身强大的钩子功能,她可以帮助大家快速开发出自己想要的微信功能插件,运营近两年来我们收获了上千用户与良好的口碑。作为一个开源产品,希望大家都能参…

php搜索文件名,window_Windows7内置搜索如何同时搜索文件名与内容,  Win7的搜索功能效果非常强 - phpStudy...

Windows7内置搜索如何同时搜索文件名与内容Win7的搜索功能效果非常强大,不但比WinXP快上许多,而且还能即输即显。不过我们在平时使用的时候大家会发现,Win7搜索只能搜索目录中的文件名,却搜索不到文件中的内容。其实不然&#xff…

php去掉编辑器自带样式,phpcms去掉CKEditor编辑器上传图片的宽高样式

phpcms V9后台富文本编辑器使用的是CKEditor,在编辑器上传图片后会自动添加图片宽高的style属性,如何去掉这个属性?找到以下文件:statics\js\ckeditor\plugins\image\dialogs\image.js打开后是压缩包的js文件,用javasc…

java系统管理员停用,为什么犯错让我成为一个更好的系统管理员

诀窍就是同一个错误不要犯两次。到目前为止,我已做了十多年 Fedora 贡献者。 Fedora 有一个由开发者和用户组成的大型社区,其中每一个人,不管是极富洞察力的用户还是出色的程序员,都有一些独有的技能。我喜欢这样的社区&#xff0…

php ajax json 实例,php+ajax+json 详解及实例代码

phpajaxjson 实例代码html页面:$(function(){$("#send").click(function(){var cont $("input").serialize();$.ajax({url:ab.php,type:post,dataType:json,data:cont,success:function(data){var str data.username data.age data.job;$(&…

如何访问静态成员php,php – 如何访问类的静态成员?

如果A是一个类,你可以通过A :: $ strName直接访问它。class A {public static $strName A is my name;}echo A::$strName; // outputs "A is my name"更新:根据你的数组内容,不管我喜欢将其定义为类对象还是类文字,都可…

php.ini用哪个,php.ini:哪一个?

一般来说,当从命令行调用PHP二进制文件时,使用cli / php.ini文件。您可以从命令行检查运行php –ini。当PHP作为FPM运行时将使用fpm / php.ini – 这是nginx安装的情况。您可以检查从您的网络服务器服务的php页面调用phpinfo()。cgi / php.ini&#xff0…

php黄页,PHP 黄页的url

首页http://localhost/index.php?myp&ccom_index&userid10产品:http://localhost/index.php?myp&ccom_index&amodel&modelid13&userid10产品单页:http://localhost/index.php?myp&ccom_index&ashow&modelid13&am…

mysql中数组转list,Arrays.asList(T... a) 不转换基本类型数组值为list

随手总结一下,数组转换为list总结int[] a1 new int[] { 1, 2, 3, 4 };String[] a2 new String[] { "srt1", "srt2", "srt3", "srt4" };System.out.println(a1.getClass().getName() ": " Arrays.asList(a1))…

php swoole process,PHP swoole的process模块创建和使用子进程操作示例

本文实例讲述了PHP swoole的process模块创建和使用子进程操作。分享给大家供大家参考,具体如下:swoole中为我们提供了一个进程管理模块 Process,替换PHP的 pcntl 扩展,方便我们创建进程,管理进程,和进程间的…

php什么是静态类,三.PHP静态类

3.PHP静态类/******************8PHP静态类*************/class Shtml{var $Templet;var $DataSource;var $Dir;var $fileName;var $mod;var $handle;function Shtml($fileName ""){$this->fileName $fileName;$this->mod "wb";$this->handle …

php 五颗星评价,简单实现点触/输入值给五颗星评价

先上效果图gif.gif1.码UI。。。UILabel *label [[UILabel alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 30)];label.text "点击星星可以自动获取评分哦~";label.textColor [UIColor whiteColor];label.textAlignment NSTextAlignmentCenter;…

PHP服务器端语言是什么意思,PHP作为服务器端语言,有哪些优点?

php语言作为一门强健的服务器端语言,汇集多种语言优点于一身,为web落地页提供快速便捷的服务,亿速云为您详细解答php语言的相关优点。1、本地化使用其他语言编写的网站在访问者进入网站时,会通过语言翻译程序分析访问者的母语&…

switch语句php,PHPswitch 语句 - PHP教程

PHP switch 语句有时,为了避免 if 语句过于冗长,提高程序的可读性,可以使用 switch 分支控制语句。switch 语句用于根据多个不同条件执行不同动作。如果您希望有选择地执行若干代码块之一,请使用 switch 语句。语法switch (n){cas…

oracle1461,Oracle 10.2.0.3的ORA-1461错误

Oracle 10.2.0.3的ORA-1461错误ORA-1461 encountered when generating server alert SMG-3500经研究发现,其是Oracle 10g的一个Bug,并且目前只有Oracle 10.2.0.3会遇到:造成这个错误的原因是由于SMON 进程正在 UPDATE SMON_SCN_TIME表时引发了…

oracle数据库表空间如何清理,oracle数据库清理临时表空间

方法一、重启库   库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的应用机会,不过这种方法还是很好用的。   法二、Metalink给出的一个方法   修改一下TEMP表空…

matlab cam orbit,Matlab的绘图函数

在Matlab的命令窗口中键入doc graph2d/graph3d/specgraph 可以获得详细的帮助graph2dTwo dimensional graphs.Elementary X-Y graphs.plot - Linear plot.loglog - Log-log scale plot.semilogx - Semi-log scale plot.semilogy - Semi-log scale plot.polar - Polar coordinat…

oracle数据库编程实验2答案,Oracle数据库-作业2-答案

第二次书面作业答案(作业在2013.5.15之前交,使用学院统一的作业封面,题目可以打印,答题内容必须手写)一、填空题1.PL/SQL程序块主要包括3个主要部分:声明部分、执行部分和理 部分。2.使用显式游标主要包括4个步骤&…

linux uefi无法启动文件,解决UEFI安装无法启动的问题

前言我们产品是支持UEFI安装的,在很多款机器上都正常的安装。今日在浪潮服务器和技嘉服务器上都遇到一次,可以安装,但是无法正常启动。所以我们必须要解决此问题,来支持更多的硬件。基础知识EFI的全称是,Extensible Fi…

如何连接Linux上的服务器 网络编程,Linux 网络编程 一

一、网络编程基础网络编程本身是一门很大的学问,涉及到的东西也很多,尤其是各种协议。先看图:正如上图所示,网络编程中包含五大层面(也有区分六个层面),从应用层到物理层可以明显看出 越往下越接近计算机硬件。自己并不…