php類的屬性和方法,PHP類中Static方法效率測試

 2023-11-19 阅读 31 评论 0

摘要:因為有好幾個項目等著做,又不是很急,再加上目前成型的那些框架多多少少用著總是有點不太如意,所以決定先自己寫一個框架,然后再做項目。既然寫框架,自然要經常做一些執行效率上的測試,今天做了一個static效率的測試。 類的定義如下

因為有好幾個項目等著做,又不是很急,再加上目前成型的那些框架多多少少用著總是有點不太如意,所以決定先自己寫一個框架,然后再做項目。既然寫框架,自然要經常做一些執行效率上的測試,今天做了一個static效率的測試。

類的定義如下:

class test
{public static function a(){}public function b(){}
}
$obj = new test;

?

比較以下幾種情況

  1. test::a();
  2. $obj->a();
  3. $obj->b();

?測試代碼:

php類的屬性和方法、?

$obj = new test;$test_times = 100;
$times = 10000;$effi1 = array();
$effi2 = array();while ($test_times-- > 0)
{$time1 = microtime(true);for($i=0; $i<$times; $i++){test::a();}$time2 = microtime(true);for($i=0; $i<$times; $i++){$obj->a();}$time3 = microtime(true);for($i=0; $i<$times; $i++){$obj->b();}$time4 = microtime(true);$effi1[] = ($time3 - $time2) / ($time2 - $time1);$effi2[] = ($time4 - $time3) / ($time3 - $time2);
}echo avg($effi1),"\n",avg($effi2);

?

最后的avg是自定義的計算平均數的一個函數:

?

function avg($arr)
{$result = 0;foreach ($arr as $val){$result += $val;}$result /= count($arr);return $result;
}

?

程序輸出結果:

PHP 5.2.14
0.76490628848091
1.0699484376399
PHP 5.3
0.56919482299058
1.1016495598611

為了提高測試效率應該怎么做,?

重復執行N(N>10)次,都與這個結果相差不大,說明:

  1. 直接通過類名訪問靜態方法的效率是通過實例訪問靜態方法的76%,甚至用PHP5.3時只有56%
  2. 通過實例訪問靜態方法的效率是訪問非靜態成員方法效率的106,在5.3版本變成110%
  3. 假設PHP從5.2升級到5.3時通過類名訪問靜態方法的效率沒有降低,那么通過實例訪問函數的效率至少提高了35%。我沒看過PHP源碼,有研究過PHP源碼的朋友希望能告訴我這個假設是否成立 (我想應該是成立的)

說明:以上測試基于windows 7和php.exe,5.2.14使用了apache2.2測試結果沒有區別,考慮到php.exe和通過web訪問所執行的PHP核心是一樣的,所以5.3懶得改服務器配置了,結果應該一樣。

轉載于:https://www.cnblogs.com/inpool/archive/2010/10/17/php_class_method_speed_test.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/184426.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息