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
php new static,PHP面向对象中new self( )和 new static( ) 的区别相关推荐
- php self this static,php面向对象中self和static的区别
在php的面向对象编程中,总会遇到 class test{ public static function test(){ self::func(); static::func(); } public ...
- PHP面向对象中new self( )和 new static( ) 的区别
首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类. 接下来通过一个例子来证明上面的结果 class A {public static $_a = ...
- php 静态类内存,php面向对象中static静态属性与方法的内存位置分析
本文实例分析了php面向对象中static静态属性与方法的内存位置.分享给大家供大家参考.具体如下: static静态属性的内存位置-->类,而不是对象.下面做测试来证明一下 header(&q ...
- 工作单元php,PHP面向对象中的工作单元是什么
PHP面向对象中的工作单元是什么 发布时间:2020-12-18 14:59:32 来源:亿速云 阅读:89 作者:Leah 本篇文章为大家展示了PHP面向对象中的工作单元是什么,内容简明扼要并且容易 ...
- 【Java】:类变量、类方法(static在类中的用法)及main函数细节
前言 经过一个多月的学习,终于进入了学习Java的第二阶段,本篇博客主要介绍Java面向对象高级部分中 类变量.类方法 的使用,以及 main函数语法 剖析,主要设计 static关键字 在类中的使 ...
- Java面向对象中的注意事项
关于Java面向对象编程,不可能是一开始就全部学完的,他会伴随着你的Java编程的整个过程,在以后的学习或者工作中,你才能够越来越深入的去理解面向对象这个思想.Object Oritended Pro ...
- python中如何创建类的对象_python面向对象中如何建立具体的对象?
我们现在眼前所能看到的事物,都是具体的对象.很多小伙伴在面向对象中创建对象,其实都停留在对象名称的建立,计算机中并没有具体对象的描述属性.我们想要使用python中的类,建立的对象就需要是具体的.下面 ...
- java static用法_Java中static关键字的作用和用法详细介绍
static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...
- Python面向对象中反射和双下的正确用法
一.反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可 ...
最新文章
- Scrum团队初建的十一件事——Scrum中文网
- 设置Android设备在睡眠期间始终保持WLAN开启的代码实现
- 本年度最成功科技IPO企业之一:Twilio股票一月暴涨167%
- crontab命令简介
- vscode / ubuntu 下编译和调试 C/C++ 方法
- 揭秘MySQL生态重要功能,X-Engine引擎核心能力——OnlineDDL
- 获取商品列表(Feign)
- 三电平igbt死区时间计算_IGBT基础与运用-2
- C语言中auto,register,extern,static【转】
- 谈谈能带来高薪报酬的软件技术
- 速修复!Netgear 61款路由器和调制解调器中存在多个严重的预认证RCE漏洞
- 关于python列表去重复后按照元列表序列输出
- python dict setdefault_Python dict setdefault()用法及代码示例
- python爬虫爬取网站视频
- IBM将花2.5亿收购第二家以色列移动软件开发商
- Canvas(画布)的使用
- SQL server和SSMS的安装及使用说明
- Javase day06_汇总
- 免费AI改图神器,一个万能宝藏在线工具箱
- Golang | 优雅地定义枚举类型
热门文章
- 电脑无法识别u盘怎么办_电脑无法识别U盘?5步操作让办公族轻松搞定!
- Spring源码:AOP(1)
- winxp不加载oracle服务器,WinXP系统开机提示“windwos不能加载用户的配置文件”怎么办...
- [蓝桥杯][2016年第七届真题]密码脱落(记忆化搜索)
- 公共钥匙盒(排序CCF)
- excel 如何用vba将某一条记录移动到另一张工作表中_EXCEL常用快捷键
- php java 单点登录_php实现多站点共用session实现单点登录的方法详解
- 【算法竞赛学习】学术前沿趋势-论文作者统计
- html无限添加元素,jquery--html【添加元素】
- html中超链接使用_HTML实例源码