在PHP的OOP中我们有常见两种方法调用,对象调用和静态调用。
下面是一个简单的测试来比较它们的细微差异。
/** * 对象初始化 -> 调用;objectCall.php * * 测试调用50W次. * * @farwish */ class Test { public $a; public function __construct($a) { $this->a = $a; } public function ab() { return $this->a; } } $obj = new Test(10); for ($i = 0; $i < 500000; $i++) { //$obj = new Test(10); $obj->ab(); }
/** * 静态初始化 -> 调用;staticCall.php * * 测试调用50W次. * * @farwish */ class Tester { public static $a; public static function init($a) { static::$a = $a; } public static function ab() { return static::$a; } } Tester::init(10); for ($i = 0; $i < 500000; $i++) { //Tester::init(10); Tester::ab(); }
可以看到,上面两段程序,功能并无分别,测试点也很明确,对象调用和静态调用的差异有多大?
下面是执行结果,也许我们可以得出一些结论。
用户层层面对比,实例化较静态调用有一个微小的损失,单个例子看不太明显,但不同项目的应用和访问量差别很大,我们可以做的就是能静态实现就不写对象调用。这点还好说,创建一个对象并调用很正常,没什么大惊小怪。
如果把上面两处的注释打开,我们将得到下面的结果:
看的出来,我们放大了这个创建对象的时间消耗,所以要避免在循环中做一些原本可避免的损耗。
:一个小的细节往往也能指引我们做的更好。
Link:http://www.cnblogs.com/farwish/p/6034671.html
@黑眼诗人 <www.farwish.com>
时间: 2024-11-10 07:39:48