PHP中延迟静态绑定机制
2014-05-11 22:38
148 查看
学习PHP时,我们都知道静态方法,静态方法可以用作工厂方法,下面给大家看一个代码实例:
在上面的父类Parent当中包含了很多的功能可被扩展类所调用,但是,他的两个派生类在创建自己的对象时使用了大量的重复代码,这是我们所不能忍受的,因为大量的重复代码很烦人也说明了你不是一个合格的coder。
笔者一直都坚信:简单的就是最好的。那么我们能不能把_create()方法放在父类当中被公共使用呢?
来看下面的实例:
这样仿佛我们就解决问题了,但是,由结果我们可以看出,并不是我们想要的One和Two类的实例对象,怎么回事呢?
因为self指的不是调用上下文,而是解析上下文。因此,self被解析为定义_create()方法的Parent类。而不是解析为调用_create方法的One和Two类的实例对象。
但是,在PHP中引入了延迟静态绑定机制,其实就是使用static关键字。而static类似于self和parent,但他指的是被调用的类不是包含类。
下面,我们来使用static进行改进:
由输出结果可以看出,确实生成了One和Two类的实例化对象,是不是省去了很多的重复代码,确实很好用吧,嘿嘿~~~
(完)
<?php /** Static:关键字 */ Class Parent { //父类的一些方法... } Class One extends Parent { Static Public function _create () { return new One(); } } Class Two extends Parent { Static Public function _create () { return new Two(); } } //...... print_r(One::_create()); print_r(Two::_create()); ?>
在上面的父类Parent当中包含了很多的功能可被扩展类所调用,但是,他的两个派生类在创建自己的对象时使用了大量的重复代码,这是我们所不能忍受的,因为大量的重复代码很烦人也说明了你不是一个合格的coder。
笔者一直都坚信:简单的就是最好的。那么我们能不能把_create()方法放在父类当中被公共使用呢?
来看下面的实例:
<?php /** Static:延迟静态绑定关键字 */ Class Parent { //父类的一些方法... Static Public function _create () { return new self(); } } Class One extends Parent { } Class Two extends Parent { } //...... print_r(One::_create()); print_r(Two::_create()); ?>
这样仿佛我们就解决问题了,但是,由结果我们可以看出,并不是我们想要的One和Two类的实例对象,怎么回事呢?
因为self指的不是调用上下文,而是解析上下文。因此,self被解析为定义_create()方法的Parent类。而不是解析为调用_create方法的One和Two类的实例对象。
但是,在PHP中引入了延迟静态绑定机制,其实就是使用static关键字。而static类似于self和parent,但他指的是被调用的类不是包含类。
下面,我们来使用static进行改进:
<?php /** Static:关键字 */ Class Parent { //父类的一些方法... Static Public function _create () { return new static(); //这里使用static延迟静态绑定关键字static } } Class One extends Parent { } Class Two extends Parent { } //...... print_r(One::_create()); print_r(Two::_create()); ?>
由输出结果可以看出,确实生成了One和Two类的实例化对象,是不是省去了很多的重复代码,确实很好用吧,嘿嘿~~~
(完)
相关文章推荐
- PHP延迟静态绑定的深入讲解
- 父类方法返回子类实例:PHP延迟静态绑定
- PHP延迟静态绑定
- php的魔术方法__get(),__set(),__call(),__callStatic()以及static延迟静态绑定
- php static延迟静态绑定
- PHP延迟静态绑定示例分享
- php面对对象之延迟静态绑定:static关键字
- [转]PHP5.3_延迟静态绑定_static
- static延迟静态绑定的机制研究
- 解决PHP继承无法访问父类静态属性的问题,延迟静态绑定
- PHP延迟静态绑定示例分享
- php延迟静态绑定实例分析
- php的延迟静态绑定
- PHP延迟静态绑定
- PHP延迟静态绑定
- php中“延迟静态绑定”的使用
- php static延迟静态绑定
- 简单谈谈php延迟静态绑定
- PHP延迟静态绑定:static关键字
- PHP面向对象:延迟静态绑定(static关键字)