Home  >  Article  >  Backend Development  >  PHP静态推延绑定和普通静态效率简单对比

PHP静态推延绑定和普通静态效率简单对比

WBOY
WBOYOriginal
2016-06-13 12:00:56903browse

PHP静态延迟绑定和普通静态效率简单对比

只是一个简单的小实验,对比了下 延迟绑定 和 非延迟的效率

延迟绑定主要就是使用 static 关键字来替代原来的 self ,但功能非常强大了


实验代码:

class A {	protected static $cc1 = array('a1', 'b', 'c', 'd');	protected static $cc2 = array('a2', 'b', 'c', 'd');	protected static $cc3 = array('a3', 'b', 'c', 'd');	protected static $cc4 = array('a4', 'b', 'c', 'd');	protected static $cc5 = array('a5', 'b', 'c', 'd');	public static function n1() {		return static::$cc1;	}	public static function n2() {		return static::$cc2;	}	public static function n3() {		return static::$cc3;	}	public static function n4() {		return static::$cc4;	}	public static function n5() {		return static::$cc5;	}}class C extends A {}class B {	protected static $cc1 = array('a1', 'b', 'c', 'd');	protected static $cc2 = array('a2', 'b', 'c', 'd');	protected static $cc3 = array('a3', 'b', 'c', 'd');	protected static $cc4 = array('a4', 'b', 'c', 'd');	protected static $cc5 = array('a5', 'b', 'c', 'd');	public static function n1() {		return self::$cc1;	}	public static function n2() {		return self::$cc2;	}	public static function n3() {		return self::$cc3;	}	public static function n4() {		return self::$cc4;	}	public static function n5() {		return self::$cc5;	}}


上面总共 A 、B 、C 三个类,里面全是静态成员变量和方法,其中 

A 类是使用了静态延迟, 

B 类是非延迟,

C 类是继承A类实现了静态成员变量和方法的延迟绑定。


过程也不多说了,环境是 PHP5.4.27 直接上测试结果:


有两种情况,

1. 当只有 A、B类(也就是不让任何类继承A类)时,效率上几乎没有差别的

2. 当A类被C类继承了之后,使用静态延迟绑定的A类性能将会比 B类稍差一些(只要A类有了继承的类就会变慢)


循环十万次,耗时在 2.8s ~ 3.2s 之间 时间差距在 0.3 秒左右,应该还是可以忽略不计了吧


补充个:

后来加了些测试方法,

如果 C 类继承 A 类后,重载了部分 A 类中的静态成员变量,重载的越多则速度和 B 类(非延迟)就越接近,但 A 类的速度仍然会比 B 类 和 C 类慢




Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn