欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP microtime用法点滴

程序员文章站 2022-05-18 08:46:12
...

虽然我是个PHP新手,但是今天看到一段代码,忍不住修改了几行。

  1. class runTime {

  2. var $StartTime = 0;
  3. var $StopTime = 0;
  4. var $TimeSpent = 0;
  5. function start(){

  6. $this->StartTime = microtime();
  7. }
  8. function stop(){

  9. $this->StopTime = microtime();
  10. }
  11. function spent() {

  12. if ($this->TimeSpent) {
  13. return $this->TimeSpent;
  14. } else {
  15. $StartMicro = substr($this->StartTime,0,10);
  16. $StartSecond = substr($this->StartTime,11,10);
  17. $StopMicro = substr($this->StopTime,0,10);
  18. $StopSecond = substr($this->StopTime,11,10);
  19. $start = floatval($StartMicro) + $StartSecond;
  20. $stop = floatval($StopMicro) + $StopSecond;
  21. $this->TimeSpent = $stop - $start;
  22. return round($this->TimeSpent,8);
  23. }
  24. } // end function
  25. }
复制代码

1、为什么说封装欠妥? 在使用过程中,我发现那几个类的属性,没必要作为var (public )形式出现,既然用了class,那么就遵照下面向对象的一些基本规则,这几个变量完全可以用private 访问控制。

2、microtime 用得不够好? 手册上关于microtime 的一些说明:

定义和用法 microtime() 函数返回当前 Unix 时间戳和微秒数。

如果调用时不带可选参数,本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。

在PHP5 以上版本,是可以接受参数true,这样就能直接返回浮点数,而且效率会比现在这样做高不少。

下面是网上找到的一段小代码,可以做参考:

  1. function microtime_float3(){

  2. return microtime(true);
  3. }
  4. function microtime_float2(){

  5. if( PHP_VERSION > 5){
  6. return microtime(true);
  7. }else{
  8. list($usec, $sec) = explode(" ", microtime());
  9. return ((float)$usec + (float)$sec);
  10. }
  11. }
  12. function microtime_float(){

  13. list($usec, $sec) = explode(" ", microtime());
  14. return ((float)$usec + (float)$sec);
  15. }
  16. function runtime($t1){

  17. return number_format((microtime_float() - $t1)*1000, 4).'ms';
  18. }
  19. $t1 = microtime_float();

  20. for($i=0;$i microtime_float();
  21. }
  22. echo "microtime_float=====";
  23. echo runtime($t1).'
    ';
  24. $t1 = microtime(true);
  25. for($i=0;$i microtime(true);

  26. }
  27. echo "microtime_true=====";
  28. echo runtime($t1).'
    ';
  29. $t1 = microtime(true);
  30. for($i=0;$i microtime_float2();

  31. }
  32. echo "microtime_float2=====";

  33. echo runtime($t1).'
    ';
  34. $t1 = microtime(true);
  35. for($i=0;$i microtime_float3();

  36. }
  37. echo "microtime_float3=====";
  38. echo runtime($t1).'
    ';
  39. ?>
复制代码

本机winxp运行结果: microtime_float=====109.5631ms microtime_true=====38.8160ms microtime_float2=====52.7902ms microtime_float3=====45.0699ms Linux上运行结果: microtime_float=====47.2510ms microtime_true=====9.2051ms microtime_float2=====16.3319ms microtime_float3=====12.2800ms