文档章节

PHP5.3_延迟静态绑定_static

斯文剑客
 斯文剑客
发布于 2012/01/06 13:05
字数 172
阅读 1737
收藏 3

基于PHP版本: 5.3.5

PHP5.3 以后引入了延迟静态绑定:

static(关键字) 类似于 self(关键字) , 但它指向的是被调用的类(Document而不是包含类(DomainObject) static 和 self 的区别:

Code:

<?php
class DomainObject{
	public static function createStatic(){
		return new static();		
	}
	public static function createSelf(){
		return new self();
	}
}

class User extends DomainObject{
	
}

class Document extends DomainObject{
	
}

echo '<pre>';
var_dump( Document::createStatic());
var_dump( Document::createSelf());

Result:

object(Document)[1]
object(DomainObject)[1]

 

以前你这么写:

abstract class DomainObject{

}

class User extends DomainObject{
	public static function create(){
		return new User();
	}
}

class Document extends DomainObject{
	public static function create(){
		return new Document();
	}
}

现在, 你可以这么写: 

abstract class DomainObject{
	public static function create(){
		return new static();
	}
}

class User extends DomainObject{

}

class Document extends DomainObject{

}

好处: 可以节省大量重复代码~

 

 

© 著作权归作者所有

斯文剑客
粉丝 23
博文 55
码字总数 9413
作品 0
昌平
程序员
私信 提问
加载中

评论(2)

sheng9632
sheng9632
举例很棒
小囧
小囧
漂亮哈~ 确实方便了不少~
PHP学习笔记——延迟静态绑定

使用场景 先来观察以下代码: 输出: object(aClass)#1 (0) { } object(bClass)#1 (0) { } 以上aClass和bClass继承于base这个抽象类,但是在两个子类中同时实现了create()这个静态方法。遵从o...

botkenni
2016/11/07
3
0
《Zend Framework 2 程序员参考指南》 一、概述 Overview

Zend Framework 2是一个使用PHP 5.3+(含以上版本)开发WEB应用程序和服务的开放源代码的框架(framework)。Zend Framework 2使用100%的面相对象代码,并且利用了大部分PHP5.3 的新功能,命...

v8v9v3000
2013/10/03
0
0
通过工厂模式来认识PHP的静态延迟绑定

通过简单的工厂模式来认识PHP的静态延迟绑定 当我们需要为很多类添加实例化自己的成员函数时,可以用工厂设计模式 + 静态延迟绑定的特性,在定级类中创建实例化上下文类的方法,继而让子类可...

big_cat
2015/09/22
102
0
PHP "延迟静态绑定" 功能,static

从这个名字的定义提取出两个关键点,第一点静态,也就是说这个功能只适用于静态属性或静态方法。 第二点延迟绑定,这个根据下面代码就可以很好的理解 我在printName函数里面使用了self关键字...

nsns
2018/09/25
6
0
Java中的静态绑定和动态绑定

在Java中,当你调用一个方法时,可能会在编译时期解析,也可能实在运行时期解析,这全取决于到底是一个静态方法还是一个虚方法。如果是在编译时期解析,那么就称之为静态绑定,如果方法的调用...

t_yapeng
2017/10/26
7
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
6
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
9
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
5
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
7
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
7
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部