在对类执行100w次循环后, 常量最快,变量其次,静态变量消耗时间最高

其中:

常量消耗:101.1739毫秒

变量消耗:2039.7689毫秒

静态变量消耗:4084.8911毫秒

测试代码:

  1. class Timer_profiler {
  2.  
  3. public static $begin_timer;
  4. public static $finish_timer;
  5. public static $timer_html;
  6.  
  7. /**
  8. * 计算时间差
  9. * @return type
  10. */
  11. public static function getRecordTimer() {
  12. return (self::getFinishTimer() - self::getBeginTimer()) * 1000;
  13. }
  14.  
  15. /**
  16. * 生成输出HTML
  17. * @param type $message
  18. * @return type
  19. */
  20. public static function recordHtml($message = '') {
  21. self::setFinishTimer();
  22. return "<p>{$message}耗时: " . self::getRecordTimer() . " 毫秒</p>";
  23. }
  24.  
  25. /**
  26. * 设置开始时间
  27. */
  28. public static function setBeginTimer() {
  29. self::$begin_timer = self::getTime();
  30. }
  31.  
  32. /**
  33. * 设置结束时间
  34. */
  35. public static function setFinishTimer() {
  36. self::$finish_timer = self::getTime();
  37. }
  38.  
  39. /**
  40. * 获取开始时间
  41. * @return type
  42. */
  43. public static function getBeginTimer() {
  44. return self::$begin_timer;
  45. }
  46.  
  47. /**
  48. * 获取结束时间
  49. * @return type
  50. */
  51. public static function getFinishTimer() {
  52. return self::$finish_timer;
  53. }
  54.  
  55. /**
  56. * 获取带微妙的时间戳
  57. * @return type
  58. */
  59. private static function getTime() {
  60. list($usec, $sec) = explode(" ", microtime());
  61. return (number_format($sec+$usec,6,'.', ''));
  62. }
  63.  
  64. }
  65. function computeTime($otime,$message){
  66. return;
  67. $ntime = xdebug_time_index();
  68. $str = '';
  69. $str .= $message . ($ntime*1000-$otime*1000);
  70. $str .= "<br>";
  71. echo $str;
  72. }
  73.  
  74. function getMemoryUsed(){
  75. $str = '消耗内存<h3 style="color:red"> ';
  76. $str .= round(memory_get_usage()/1024/1024, 4).'MB';
  77. $str .= '</h3>';
  78. echo $str;
  79. }
  80.  
  81. $count_i = 100*10000;
  82. //$count_i = 100000;
  83. Timer_profiler::setBeginTimer();
  84. computeTime(xdebug_time_index(),'开始执行');
  85. echo Timer_profiler::recordHtml('开始执行');
  86. getMemoryUsed();
  87. class TestVar {
  88. public $A1 = 'aaaaaaaaaaaaaaaaa';
  89. public $A2 = 'aaaaaaaaaaaaaaaaa';
  90. public $A3 = 'aaaaaaaaaaaaaaaaa';
  91. public $A4 = 'aaaaaaaaaaaaaaaaa';
  92. public $A5 = 'aaaaaaaaaaaaaaaaa';
  93. public $A6 = 'aaaaaaaaaaaaaaaaa';
  94. public $A7 = 'aaaaaaaaaaaaaaaaa';
  95. public $A8 = 'aaaaaaaaaaaaaaaaa';
  96.  
  97. }
  98. $TestVar = new TestVar();
  99. for($i=0;$i<=$count_i;$i++){
  100. $t = $TestVar->A1;
  101. $t = $TestVar->A2;
  102. $t = $TestVar->A3;
  103. $t = $TestVar->A4;
  104. $t = $TestVar->A5;
  105. $t = $TestVar->A6;
  106. $t = $TestVar->A7;
  107. $t = $TestVar->A8;
  108. }
  109. getMemoryUsed();
  110. echo Timer_profiler::recordHtml('变量完成');
  111. computeTime(xdebug_time_index(),'变量完成');
  112.  
  113. Timer_profiler::setBeginTimer();
  114. class TestStaticVar {
  115. static $A1 = 'aaaaaaaaaaaaaaaaa';
  116. static $A2 = 'aaaaaaaaaaaaaaaaa';
  117. static $A3 = 'aaaaaaaaaaaaaaaaa';
  118. static $A4 = 'aaaaaaaaaaaaaaaaa';
  119. static $A5 = 'aaaaaaaaaaaaaaaaa';
  120. static $A6 = 'aaaaaaaaaaaaaaaaa';
  121. static $A7 = 'aaaaaaaaaaaaaaaaa';
  122. static $A8 = 'aaaaaaaaaaaaaaaaa';
  123.  
  124. }
  125.  
  126. for($i=0;$i<=$count_i;$i++){
  127. $t = TestStaticVar::$A1;
  128. $t = TestStaticVar::$A2;
  129. $t = TestStaticVar::$A3;
  130. $t = TestStaticVar::$A4;
  131. $t = TestStaticVar::$A5;
  132. $t = TestStaticVar::$A6;
  133. $t = TestStaticVar::$A7;
  134. $t = TestStaticVar::$A8;
  135. }
  136. getMemoryUsed();
  137. echo Timer_profiler::recordHtml('静态变量完成');
  138. computeTime(xdebug_time_index(),'静态变量完成');
  139.  
  140. Timer_profiler::setBeginTimer();
  141. class TestConstVar {
  142. const A1 = 'aaaaaaaaaaaaaaaaa';
  143. const A2 = 'aaaaaaaaaaaaaaaaa';
  144. const A3 = 'aaaaaaaaaaaaaaaaa';
  145. const A4 = 'aaaaaaaaaaaaaaaaa';
  146. const A5 = 'aaaaaaaaaaaaaaaaa';
  147. const A6 = 'aaaaaaaaaaaaaaaaa';
  148. const A7 = 'aaaaaaaaaaaaaaaaa';
  149. const A8 = 'aaaaaaaaaaaaaaaaa';
  150.  
  151. }
  152. for($i=0;$i<=$count_i;$i++){
  153. $t = TestConstVar::A1;
  154. $t = TestConstVar::A2;
  155. $t = TestConstVar::A3;
  156. $t = TestConstVar::A4;
  157. $t = TestConstVar::A5;
  158. $t = TestConstVar::A6;
  159. $t = TestConstVar::A7;
  160. $t = TestConstVar::A8;
  161. }
  162. getMemoryUsed();
  163. echo Timer_profiler::recordHtml('常量完成');
  164. computeTime(xdebug_time_index(),'常量完成');
  165.  
  166. //echo Timer_profiler::recordHtml('共执行');
  167. computeTime(xdebug_time_index(),'共执行');
  168. exit;

php 类静态变量 和 常量消耗内存及时间对比的更多相关文章

  1. 常量和静态变量会先载入内存后在进行执行php代码

    static $test=1;//在php执行前就已经写入内存$test++;var_dump($test);static $test=10;//在php执行前就已经写入内存var_dump($tes ...

  2. PHP接口中的静态变量、常量与类中静态变量、常量的区别

    接口: 1 不能够定义静态变量(常量除外) 2 定义的常量 const YOUCONST = VALUE,不能在子类中覆盖,在子类中以 interfaceName::YOUCONST的方式调用 3 不 ...

  3. PHP 类属性 类静态变量的访问

    php的类属性其实有两种,一种是类常量,一种是类静态变量.两种容易引起混淆. 如同静态类方法和类实例方法一样,静态类属性和实例属性不能重定义(同名),但静态属性可以和类常量同名. <?php c ...

  4. python类静态变量

    python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...

  5. oc 基本语法 类 静态变量 常量

    // // ReViewClass.h // hellowWorld // 本类是oc复习练手类 // Created by hongtao on 2018/3/26. // Copyright © ...

  6. Java 静态变量,常量和方法

    static 关键字 例如:在球类中使用PI这个常量,可能除了本类需要这个常量之外,在另外一个圆类中也需要使用这个常量.这时没有必要 在两个类中同时创建PI这个常量,因为这样系统会将这两个不在同一个类 ...

  7. Java静态变量,常量,成员变量,局部变量

    类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰.(static表示“全局的”.“静态的”,用来修饰成员变量和成员方法,或静态代码块(静态代码块独立于类成员,jvm加载类时会执行 ...

  8. PHP:第一章——PHP中静态变量和常量

    <?php header("Content-Type:text/html;charset=utf-8"); /******************************** ...

  9. C++类静态变量的一种使用特例

    不同进程里的数据默认情况下是互不影响的. 静态变量是属于类本身的,它的所有实例可以共享这个静态变量,但是有个先天条件就是在同一个进程的情况下!!

随机推荐

  1. [人物存档]【AI少女】【捏脸数据】朴素风格

    点击下载(城通网盘):AISChaF_20191115113752642.png 点击下载(城通网盘):AISChaF_20191111232359711.png

  2. C之输入输出函数(1) -- fgets()

    https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_71/rtref/fgets.htm #include <stdio.h> ...

  3. 【hihocoder 1554】最短的 Nore0061

    [链接]http://hihocoder.com/problemset/problem/1554 [题意] 中文题 [题解] DP; 设f[i][j][k]表示前i个字符,第一个串已经得到了前j个字符 ...

  4. 生产环境用到的几个有用的Linux命令

    有时候,几个有用的Linux命令可以很大的提高你的工作效率. 1.free -m 这个命令我暂时就只会这么使用,它可以查看服务器的内存资源 2.top 这个命令同样可以查看服务器的资源,当然我还是用它 ...

  5. 屏幕左侧鼠标常驻,隐藏部分显示,文章鼠标常驻,隐藏部分隐藏(我的hexo next博客)

    文章目录 如图 功能 代码 博客地址:https://mmmmmm.me 源码:https://github.com/dataiyangu?tab=repositories 如图 功能 最左侧添加透明 ...

  6. 反射与类加载之反射基本概念与Class(一)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述反射与类加载: [三种获取Class对象的方式] [ ...

  7. 新建一个servlet类,继承HttpServlet,但是无法导入HttpServlet包

    描述: 原因:缺少tomcat的libraries(HttpServlet对应位置在tomcat的lib中====) 解决: 1. 2. 3. 4.

  8. 008-Java的StringBuilder和StringBuffer

    StringBuffer 和 StringBuilder 与String的不同 String Java中十分重要的类;被声明为final class.除了hash这个属性, 其他属性也均声明为fina ...

  9. position:relative/static/fixed/absolute定位的区别以及使用场景

    absolute是相对于自己最近的父元素来定位的,relative是相对于自己来定位的 relative 不脱离文档流,absolute 脱离文档流.也就是说:relative 的元素尽管表面上看到它 ...

  10. 运行Hama实例PageRank