php后期静态绑定
php后期静态绑定
自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。 虽然也可以调用非静态方法,但是不会在运行时绑定。
static 不再只是简单的静态修饰关键字。而是可以像下面这样调用类的静态方法,非静态方法,为什么静态非静态要分开说呢,因为调用的效果是不一样的。
- <?php
- class A {
- public static function who () {
- echo __CLASS__ ;
- }
- public static function test () {
- static:: who (); // 后期静态绑定从这里开始
- }
- }
- class B extends A {
- public static function who () {
- echo __CLASS__ ;
- }
- }
- B :: test ();
- ?>
如上代码:B调用test方法,test方法调用who方法。而B类中重写了who方法,则实际调用的是B中的who方法,所以输出的__CLASS__是B 这就是说 static 调用的静态方法会在运行时自动判断调用谁的方法(如果7行那里是self的话,就是调用的A的who方法)。
而self则只会调用定义它时所在的类中的方法。这是static的一个区别于其它调用的一个新特性。而static调用非静态方法时则不会达到这种后期绑定的效果,所以叫后期静态绑定。
这里static和self的用法很相似,只是作用区别大。
还有就是 static只能调用静态属性。
总结:
综上所述,static关键字可以实现以下功能:
1 调用类的静态方法 有后期静态绑定效果;
2 调用类的静态属性 有后期静态绑定效果;
3 调用类的非静态方法 没有后期静态绑定效果;
4 强调一下 不可以调用非静态属性;
php后期静态绑定的更多相关文章
- PHP的后期静态绑定
self 是个孝子 不管后来 谁是它的领导(调用它) 谁生了它 它就听谁的 子类调用父类的方法 self 的生存空间是父类 不管是不是子类调用 我生在哪 我就在哪个类里面找属性/方法 static ...
- PHP之后期静态绑定
PHP后期静态绑定的(late static bindings) 理解PHP延迟静态绑定 static::中的static其实是运行时所在类的别名,并不是定义类时所在的那个类名.这个东西可以实现在父类 ...
- php中的后期静态绑定
后期静态绑定PHP手册 使用的保留关键字: static 定义: static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的.也可以称之为"静态绑定",因为它可以用 ...
- static后期静态绑定
先说一下__CLASS__,get_class() , get_called_class() 区别: __CLASS__获取当前的类名, get_class()与上面一样,都是获取当前的类名, ge ...
- 139-PHP static后期静态绑定(二)
<?php class test{ //创建test类 public function __construct(){ static::getinfo(); //后期静态绑定 } public s ...
- 138-PHP static后期静态绑定(一)
<?php class test{ //创建test类 public function __construct(){ self::getinfo(); //后期静态绑定 } public sta ...
- php中的后期静态绑定("Late Static Binding")
在我们以往中,在类中使用self关键字的时候都是指向了被调用方法定义时的类,而非原始的调用类. 例如: class Animal{ static $IQ_lv_avg = 1; public stat ...
- 父类方法返回子类实例:PHP延迟静态绑定
案例分析 先前的PHP项目中,看到类似于以下的一段代码: <?php class DBHandler { public function get() { } } class MySQLHandl ...
- 静态绑定 self 和 static的区别
后期静态绑定 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 准确说,后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwar ...
随机推荐
- 如何将本地代码上传到Github
这些内容只是Git知识的冰山一角 更多知识请 阅读 Pro git.Pro git 所有内容均根据知识共享署名非商业性共享3.0版许可证授权,各位可以免费下载阅读,有pdf.mobi.qpub格式可以 ...
- /etc/rsyslog.conf配置文件说明
一.authpriv.* /var/log/secure 服务名称[连接符号]日志等级 日志记录位 ...
- Java 系列之spring学习--注解(三)
一.注解 使用注解之前要开启自动扫描功能 <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- 文件操作:Directory,File,FielStream、StreamRead和StreamWriter的使用
Directory文件类,File,FielStream.StreamRead和StreamWriter的使用 (转载) 创建一个新文件 Directory.CreateDirectory(@&quo ...
- Oracle表的种类及定义
1表的类型 1)堆组织表(heap organized tables). 当增加数据时,将使用在段中找到的第一个适合数据大小的空闲空间.当数据从表中删除时,留下的空间允许随后的insert和updat ...
- hdu2883 最大流,判断满流 优化的SAP算法
这是09年的多校联赛题目,比10年的难度要大.如果没做过hdu3572,建议先去做.有了解题思维再来做这题. 这题与hdu3572类似.但是1 <= si < ei <= 1,000 ...
- switch穿透中语句的执行顺序
Day04_SHJavaTraing_4-6-2017 计算下列switch语句的运行结果 1. int x = 2,y=3; switch(x){ default: y++; case 3: y++ ...
- python版本及ML库
一:关于Python版本的选择问题 关于Python的选择问题:要看学术界能不能把科学库迁移到Python3. 1:多个版本共用: 最近发现SciPy的最高版本是3.2,只能是退而求其次,不使用最新版 ...
- C# 响应一个html页面
System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("<html><head ...
- ZBrush细说3D海盗角色的创建艺术
一提到海盗,就不由自主想到了<加勒比海盗>,那个帅得一塌糊涂的杰克船长更是让人夜不能寐寝难安,但在艺术的世界里,角色无美丑,今天我们要讲的这位海盗,就与“帅气”八竿子打不着了,它甚至有点古 ...