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 self( )和 new static( ) 的区别相关推荐
- php new static,PHP面向对象中new self( )和 new static( ) 的区别
首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类. 接下来通过一个例子来证明上面的结果 class A { public static $_a = ...
- php new static,PHP中new self()和new static()的区别用法
浅谈PHP中new self()和new static()的区别 本文介绍了PHP中new self()和new static()的区别,分享给大家,也给自己留个笔记. 1.new static() ...
- php 静态类内存,php面向对象中static静态属性与方法的内存位置分析
本文实例分析了php面向对象中static静态属性与方法的内存位置.分享给大家供大家参考.具体如下: static静态属性的内存位置-->类,而不是对象.下面做测试来证明一下 header(&q ...
- php self this static,php面向对象中self和static的区别
在php的面向对象编程中,总会遇到 class test{ public static function test(){ self::func(); static::func(); } public ...
- PHP中self和static的区别,php中self与static的区别
原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...
- 工作单元php,PHP面向对象中的工作单元是什么
PHP面向对象中的工作单元是什么 发布时间:2020-12-18 14:59:32 来源:亿速云 阅读:89 作者:Leah 本篇文章为大家展示了PHP面向对象中的工作单元是什么,内容简明扼要并且容易 ...
- python中如何创建类的对象_python面向对象中如何建立具体的对象?
我们现在眼前所能看到的事物,都是具体的对象.很多小伙伴在面向对象中创建对象,其实都停留在对象名称的建立,计算机中并没有具体对象的描述属性.我们想要使用python中的类,建立的对象就需要是具体的.下面 ...
- Python面向对象中反射和双下的正确用法
一.反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可 ...
- 图解面向对象中的聚合与耦合概念
图解面向对象中的聚合与耦合概念 简单理解聚合与耦合 在面向对象的设计中,我们经常会听到或用到聚合.耦合的概念.面向对象的目标就是设计出高聚合.低耦合的程序.然而,究竟什么是 聚合.什么是耦合,恐怕每个 ...
最新文章
- HMM(隐马尔科夫)用于中文分词
- 逃离深圳,一个程序员的选择
- django获取客户端真实IP
- python测试开发自学教程-2019第一期《python测试开发》课程,10月13号开学
- UA MATH636 信息论8 线性纠错码的解码算法
- linux下raid5的配置
- 数据结构入门最佳书籍_最佳数据科学书籍
- 计算一个人出生了多少天(炸窝)
- iOS中UIKit继承结构
- 随想录(OllyDbg和IDA Pro的配合使用)
- 揭秘Keras推荐系统如何建立模型、获取用户爱好
- 地表反照率数据、地表净辐射通量、太阳辐射数据、地表温度、地表显热通量、NDVI、NPP、土地利用数据
- 前端javascript解压zip文件[zip.js] 附上可用demo
- ArrayList集合排序方式总结
- [WebKit] JavaScriptCore解析--基础篇(二)解释器基础与JSC核心组件
- 毕设论文-word格式问题
- 如何实现 iOS 短视频跨页面的无痕续播?
- 某美颜app sig参数分析
- Shamir秘密共享算法
- DySAT: Deep Neural Representation Learning on Dynamic Graph via Self-Attention Networks