类的静态方法与函数静态存储变量的效率比较

原创 2011年10月13日 22:35:44

经常看到两种快捷的配置文件取值方法:

1、C('config_test','key');

2、test::load_config('config_test','key');

第一种方法用函数的形式,内置static变量获取key对应的value,而第二种则使用类的静态方法获取值。

两种代码哪一种的效率更高呢? 一只搞不清楚,晚上做了一个实验。

<?php
header('Content-type:text/html;charset=utf-8');
$total = 1000000;


G('function_start');
M('function_start');
for ($i=0;$i<$total;$i++){
    $val = C('config_test','key');
}
echo '函数取值了',$total,'次,总共话费时间:',G('function_start','function_end'),'内存消耗:',M('function_start','function_end'),'<br />';


G('class_start');
M('class_start');
for ($i=0;$i<$total;$i++){
    $val = test::load_config('config_test','key');
}
echo '类静态方法取值了',$total,'次,总共话费时间:',G('class_start','class_end'),'内存消耗:',M('class_start','class_end'),'<br />';

function G($start,$end='',$dec=3) {
    static $_info = array();
    if(!empty($end)) { // 统计时间
        if(!isset($_info[$end])) $_info[$end]   =  microtime(TRUE);
        return number_format(($_info[$end]-$_info[$start]),$dec);
    } else { // 记录时间
        $_info[$start]  =  microtime(TRUE);
    }
}
function M($start,$end='') {
    static $_info = array();
    if(!empty($end)) { // 统计时间
        if(!isset($_info[$end])) $_info[$end]   =  memory_get_usage();
        return ($_info[$end]-$_info[$start]);
    } else { // 记录时间
        $_info[$start]  =  memory_get_usage();
    }
}

function C($file,$key='',$default=''){
    static $config;
    if(!isset($config[$file])){
        $config[$file] = include($file.'php');
    }
    if (empty($key)) {
        return $_config[$file];
    } elseif (isset($_config[$file][$key])) {
        return $_config[$file][$key];
    }else{
        return $default;
    }
}

class test{
    public static $_config;
    public static function load_config($file, $key = '',$default='') {
        if (isset(self::$_config[$file])) {
            if (empty($key)) {
                return self::$_config[$file];
            } elseif (isset(self::$_config[$file][$key])) {
                return self::$_config[$file][$key];
            } else {
                return $default;
            }
        }
        $path = $file.'.php';
        if (file_exists($path)) {
            self::$_config[$file] = include $path;
        }
        if (empty($key)) {
            return self::$_config[$file];
        } elseif (isset(self::$_config[$file][$key])) {
            return self::$_config[$file][$key];
        }else{
            return $default;
        }
    }
}
?>

100万次的时候的结果如下:

函数取值了1000000次,总共话费时间:1.125内存消耗:728
类静态方法取值了1000000次,总共话费时间:2.052内存消耗:1040

10万次的结果如下:

函数取值了100000次,总共话费时间:0.132内存消耗:728
类静态方法取值了100000次,总共话费时间:0.200内存消耗:1040

两个结果可以了么?

貌似类的静态方法速度比较挫。


那下次要静态全局取文件用啥好?当然用函数。


在项目中,对于频繁使用的方法,使用static修饰会提高效率吗?

在项目中,对于频繁使用的方法,使用static修饰会提高效率吗? 静态方法的好处就是不用生成类的实例就能直接调用  你不用生成对象就能用这个方法了,不是提高效率?你生成对象得占用内存空间啊...
  • tmaic
  • tmaic
  • 2011-09-22 09:22:07
  • 1879

php中静态方法static和非静态方法效率对比

如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。----这是真的么? 实践是检验代码执行效率的唯一标准,实验的结果是: 我的代码执行环境中 没有文章中说的效率提升...
  • jiaxiang521521
  • jiaxiang521521
  • 2014-04-15 23:58:09
  • 1820

变量存储方式——静态持续变量

静态持续变量指全局变量或声明为static的变量。 1、静态持续性、外部链接性      指全局变量,不加static关键字。这种变量具有外部链接性,即在其他文件中也可访问。但是要加extern关...
  • jiaminglei666
  • jiaminglei666
  • 2012-12-23 14:05:11
  • 510

静态函数里定义的变量,不为所有对象共享,类的静态变量和类外全局变量区别,静态函数和普通函数区别

一个类的静态成员,是所有对象共享的,分配空间也是在进程执行时,一开始就分配了,以后固定而不会再分配空间的.类的静态成员变量和类外全局变量的区别是,可以设定访问标志,只允许类的对象访问.如果类里定义pu...
  • nutian
  • nutian
  • 2006-11-24 14:30:00
  • 2391

C++程序设计教程函数的定义与调用

  • 2011年05月10日 15:02
  • 105KB
  • 下载

使用sort 和自定义比较函数对任意成员变量排序

我在学习C++ STL部分时,一直在思考如何使用最简单的方法实现
  • zlhhsh
  • zlhhsh
  • 2014-05-28 22:54:50
  • 1774

动态存储变量和静态存储变量

静态变量 全局变量
  • yangfm315
  • yangfm315
  • 2011-03-31 20:21:00
  • 2142

关于静态方法不能调用类中的非静态属性的理解

class test{ public $a; public function game(){ echo "123"; } public static function name(){ ...
  • Limitless1113
  • Limitless1113
  • 2015-08-24 15:52:58
  • 3143

java中内存分配以及static的用法

Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域:1.栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2.堆...
  • u013825231
  • u013825231
  • 2016-07-16 13:49:27
  • 3206

c++怎样调用类的静态方法

//.h中方法声明如下: class Mouse{ staic void Mouse::hide(); } //在main函数中调用: main(){ //Mouse.hide();/...
  • HANLIPENGHANLIPENG
  • HANLIPENGHANLIPENG
  • 2016-05-23 13:41:07
  • 1941
收藏助手
不良信息举报
您举报文章:类的静态方法与函数静态存储变量的效率比较
举报原因:
原因补充:

(最多只允许输入30个字)