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方法,主要作用就是判断这个频繁使用的变量是否存在,如果存在则直接返回,就避免多次去计算该结果(该结果是保持不变的,如果有变化这样是行不通的)。 因此在编程的时候,大家应该多考虑一下效率问题!像这种频繁使用的变量,同时计算起来又比较耗时的运算,我们可以尝试使用静态变量保存,以便二次使用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

Python教学从零开始——第四天

在前面的几天中,我们了解了tulpe,list的操作,os模块案例,for循环,前面的示例比较简单,几乎没有太多的语法,今天我们要来说一法语法,语法通常都是硬性...

2317
来自专栏一“技”之长

一个移动开发者的Mock数据之路 原

    在前端开发中,很大一部分工作都是将后台数据获取到后展示在前端界面上。如果接口是现成的,这个过程还相对容易一些,但是如果接口的开发和前端开发是同时进行的,...

751
来自专栏灯塔大数据

每周学点大数据 | No.28 表排序

No.28期 表排序 Mr. 王:前面我们讨论了一些基础磁盘算法,现在我们来讨论一些关于磁盘中图算法的问题。 通过对基础磁盘算法的学习,我们可以很容易地想到...

3387
来自专栏Fish

蓝桥杯 大臣的旅费

做过相同类型的题 题意就是求树的直径,即树中任意两点之间带权路径和的最大值。 思路就是用两次BFS,第一次搜到直径的一端,第二次就直接计算直径的长度。至于为啥是...

2776
来自专栏数值分析与有限元编程

fortran知识 | 代码错误(domain error)

如图所示,提示为:domain error ? 这表示数学函数错误,如超出数学函数的定义域,负数开平方,分母为0等等;也有可能是浮点数错误,比如sqrt(4),...

3736
来自专栏CDA数据分析师

实用小工具,教你轻松转化Python通用数据格式

已独立成项目在github上面 dataformat, 涉及模块 os, getopt, sys。 1 需求 在进行hadoop测试时,需要造大量数据,例如某个...

2075
来自专栏深度学习自然语言处理

【python】命令行参数argparse用法详解

prog.py是我在linux下测试argparse的文件,放在/tmp目录下,其内容如下:

1113
来自专栏Petrichor的专栏

tensorflow编程: Wraps python functions

在 tensorflow 中 缺乏 需要的 函数接口 时,负责将任意的 python/numpy functions 包装成 TensorFlow op。

1102
来自专栏尾尾部落

[剑指offer] 构建乘积数组

给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*....

1443
来自专栏用户2442861的专栏

阿里巴巴2014笔试题详解(9月22北京)

第一部分 单选题(前10题,每题2分;后10题,每题3分。选对得满分,选错倒扣1分,不选得0分)

2031

扫码关注云+社区

领取腾讯云代金券