php new static,PHP面向对象中new self( )和 new static( ) 的区别

首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类。

接下来通过一个例子来证明上面的结果

class A

{

public static $_a = 'Class A';

public static function echoProperty()

{

echo self::$_a . PHP_EOL;

}

}

class B extends A

{

public static $_a = 'Class B';

}

$obj = new B();

B::echoProperty();//输出 Class A

之所以会这样是因为使用self:: 或者__CLASS__对当前类的静态引用,取决于定义被调用方法所在的类,将上面Class A的方法echoProperty做一下修改变成:

class A

{

public static $_a = 'Class A';

public static function echoProperty()

{

echo static::$_a . PHP_EOL;

}

}

//再次调用B::echoProperty将输出 'CLASS B'

为了避免上面第一个例子中看到的子类重写父类的静态属性后,使用继承来的方法仍然访问父类的静态属性, PHP5.3增加了一个新的语法:后期静态绑定(Late static binding), 使用static关键字替代self关键字,使得static指向与get_called_class()返回的相同的类,即当前调用静态方法的类, 该关键字对于静态方法的访问同样有效。

下面的例子更好的说明了new self()和new static()之间的差异(后者使用了PHP的后期静态绑定指向调用方法的当前类)

class A

{

public static function get_self()

{

return new self();

}

public static function get_static()

{

return new static();

}

}

class B extends A {}

echo get_class(B::get_self()); // A

echo get_class(B::get_static()); // B

echo get_class(A::get_self()); // A

echo get_class(A::get_static()); // A

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

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

相关文章

python 动态规划_DP动态规划(Python实现)

前言_我们遇到的问题中,有很大一部分可以用动态规划(简称DP)来解。 解决这类问题可以很大地提升你的能力与技巧,我会试着帮助你理解如何使用DP来解题。 这篇文章是基于实例展开来讲的,因为干巴巴的理论实在不好理解。注意:如果你对…

php gif 透明,解决PHP剪切缩略图生成png,gif透明图时,黑色背景问题

背景图填充白色背景$white imagecolorallocate($dstim,255,255,255);imagefilledrectangle($dstim,0,0,$width,$height,$white);imagecolortransparent($dstim,$white);设置图片走透明通道$img imagecreatefrompng($src);imagesavealpha($img,true);//这里很重要;$thumb ima…

qt做的接收串口数据并显示曲线_QT无人机地面站设计与制作

近年来,无人机可谓是大火。无论是军事,还是民用,它的地位更是不用说。但,如何利用利用现有技术对无人机的信息进行操作,实现人、机合一呢?“无人机地面站”应运而生,结合仿真系统为地面工作人员…

php直接读取csv文件,php实现的读取CSV文件函数示例

本文实例讲述了php实现的读取CSV文件函数。分享给大家供大家参考,具体如下:function read_csv($cvs) {$shuang false;$str file_get_contents($cvs);for ($i0;$iif($str{$i}") {if($shuang) {if($str{$i1}") {$str{$i} *;$str{$i1} *;} el…

系统背景描述_【计算机论文】管件加工管理系统和数据库的结构探析

摘 要:结合"中国制造2025"及德国"工业4.0"的发展趋势,概述目前国内管件生产加工流程的现状和不足,基于对管件加工过程中管件之间的差别、管件加工批次的混合等特点导致的管理难点分析,介绍管件生产加工管理系统的设计思路和工作流程,并对该系统未来可进一步…

python中的命令行参数_python学习笔记6:命令行参数

1. 使用步骤使用步骤如下:# 导入模块import argparse# 获取parser, description文本会显示在help信息中parser argparse.ArgumentParser(descriptionargs discrip)# 添加选项, 具体选项类型见后面各节parser.add_argument(-a)# 解析选项args parser.parse_args(sys.argv[1:])…

php 年的第几天,收藏-php中某年第几天计算出日期年月日的代码

很实用的小功能,希望对大家有帮助。这个索引值除了方便面数据的记录和搜索,还起着记录日期信息的作用,信息量很可观。那么,如何还原索引值为可用的日期资讯呢?date(z)返回的是一年中的第几天,返回值为从0开…

shell tr 替换 空格_Shell 字符串分隔符!!!(全网最详细总结)

前言:在shell脚本编程中,我们经常会用到切割字符串,类似于python中的split。但shell中的命令比较五花八门,小编也是苦扰了很久,终于下定决心对它做一个总结。方法一:字符串替换法#/bin/bashstring"Hel…

php where 不包含,php – 除非它们包含“where”或“like”子句,否则不允许删除

我的查询 –$shortlistpartners是数组$this->db->delete(shortlist_partners);$this->db->where(opp_id,$this->input->post(opp_id));$this->db->where_in(partner_id,$shortlistpartners);除非它们包含“where”或“like”子句,否则不允许删除.错误即…

本机用域名不能访问_域名注册申请网站域名注意事项

互联网用户越来越多,也有越来越多人搭建网站,做个人博客也好、搭建企业官网也好,数量都在逐步上升。做网站的数量在上升,域名注册量肯定也在上升。有的朋友头一次注册域名,对域名不了解也不知道申请网站域名该注意哪些…

电脑微信不用手机确认_不用安装第三方软件,手机投屏到电脑就这么简单

在头条上收到网友的提问,如果想把手机的内容投影到电脑上,该怎么做?为此我做一个简单的教程,不用安装第三方软件,就用Windows 10自带的无线显示功能和安卓手机的自带无线显示功能来实现。前提条件:1. 电脑是…

php图片截取后缀,PHP抓取远程图片(含不带后缀的)教程详解

一、创建项目作为演示,我们在www根目录创建项目grabimg,创建一个类GrabImage.php和一个index.php。二、编写类代码我们定义一个和文件名相同的类:GrabImageclass GrabImage{}三、属性接下来定义几个需要使用的属性。1、首先定义一个需要抓取的…

tomcat7 https 拒绝连接_物与网怎么连接呢?物联网架构及五大通信协议

消息触达能力是物联网(internet ofthings, IOT)的重要支撑,而物联网很多技术都源于移动互联网。柳猫将阐述移动互联网消息推送技术在物联网中的应用和演进。一、物联网架构和关键技术从开发的角度,无线接入是物联网设备端的核心技术,身份设备…

安卓手机浏览器排行_5g时代已来临!五月安卓手机性价比排行:两千元以上5G手机屠榜...

5月已经过去,同时也标志着今年上半年手机的发布已经告一段落。那么在这段时间里,智能手机的性价比如何呢?考虑到现在已经开始步入5G时代,所以智能手机的价格也是普遍上涨,想要找到一款性价比不错的手机似乎有些难度。现…

noclassdeffounderror java,从终端运行Java文件时出现java.lang.NoClassDefFoundError

我是Java新手。我一直在使用Eclipse测试一个简单的Java类(名为NewHelloWorld),它在控制台中运行良好。当我尝试从终端执行相同的操作时,它会正确编译(创建HelloWorld.class而不给出任何错误),但是随后javaNewHelloWorld显示以下错误Exception…

tp3.2 不能提交到action方法_什么是死锁,如何避免死锁(4种方法)

当两个线程相互等待对方释放资源时,就会发生死锁。Python 解释器没有监测,也不会主动采取措施来处理死锁情况,所以在进行多线程编程时应该采取措施避免出现死锁。一旦出现死锁,整个程序既不会发生任何异常,也不会给出任…

虚拟局域网软件开源_ZeroTier虚拟局域网免费远程桌面体验--替代TeamViewer

本文主要是关于使用ZeroTier创建虚拟局域网来实现免费远程桌面的方案的体验,包含了一些对不同方案的优缺点的描述。最近因为疫情在家不得不通过远程连接实验室电脑,有两种基本的解决方案:连接学校VPN,然后使用系统自带的远程桌面连…

java复制的函数会报错,2 面试题之面向对象

大纲:一、两个重要概念① 请说明类和对象的区别类是对某一类实物的描述,是抽象的;对象是一个实实在在的个体,是类的一个实例;② 解释一下什么是类加载机制、双亲委派模型,好处是什么?类加载机制…

从零开始学android编程_小白也能学得会!谷歌推出免费的Kotlin和Android开发课程...

程序员书库(ID:CodingBook) 猿妹编译链接:https://android-developers.googleblog.com/2020/07/learn-android-and-kotlin-with-no-experience.html5月份,微软刚推出了一套免费的Python在线视频课程,面向数据科学和机器学习初学者…

php ziparchive(),php的ZipArchive类用法实例

本文实例讲述了php的ZipArchive类用法,分享给大家供大家参考。具体如下:通常来说,php5.2开始支持ZipArchive类,php4只能使用zip函数。其实在官方实现zip类之前,已经有大牛贡献了打包解压zip文件的方法。现在php包含了Z…