devil20 发表于 2017-4-8 11:29:38

PHP使用类“单例”静态变量提高效率

  再多次需要使用一个变量的时候,我们可以使用类的静态变量来保存这个值,避免多次调用,多次计算导致效率下降!


<?php
class TestExplame{
public static $myName;
public static function setMyName(){
self::$myName = self::getMyNumberName();
}
public static function getMyNumberName(){
$sum = 0;
for($i = 0; $i<10000; $i++){
$sum +=$i;
}
return "telmer_$sum";
}
public static function getAllOfName($number){
$count = 0;
$nameArray = array();
while($count < $number){
$nameArray[$count] = "telmer_$count" . self::getMyNumberName();
$count++;
}
return $nameArray;
}
}



//如果我们使用如下方式调用,将会产生一大堆效率问题
require_once "test.php";
TestExplame::getAllOfName(8000);

这个大概计算了一下接近15秒左右;

而如果我们将代码变化一下,如下:时间会成为多少呢?

class TestExplame{public static $myName;public static $numberName;public static function getstaticNumberName(){if(isset(self::$numberName)){return self::$numberName;}self::$numberName = self::getMyNumberName();return self::$numberName;}public static function setMyName(){self::$myName = self::getMyNumberName();}public static function getMyNumberName(){$sum = 0;for($i = 0; $i<10000; $i++){$sum +=$i;}return "telmer_$sum";}public static function getAllOfName($number){$count = 0;$nameArray = array();while($count < $number){$nameArray[$count] = "telmer_$count" . self::getstaticNumberName();$count++;}return $nameArray;}
}

再次来执行一次这个结果查看一下时间

require_once "test.php";
TestExplame::getAllOfName(8000);

测试了一下1秒之内就可以完成!

上面的例子有点类似于单例设计模式,但是这个并非是单例。

以上主要方法是添加了一个getstaticNumberName方法,主要作用就是判断这个频繁使用的变量是否存在,如果存在则直接返回,就避免多次去计算该结果(该结果是保持不变的,如果有变化这样是行不通的)。

因此在编程的时候,大家应该多考虑一下效率问题!像这种频繁使用的变量,同时计算起来又比较耗时的运算,我们可以尝试使用静态变量保存,以便二次使用。
页: [1]
查看完整版本: PHP使用类“单例”静态变量提高效率