首頁  >  文章  >  後端開發  >  php用static方法的原因介紹(程式碼範例)

php用static方法的原因介紹(程式碼範例)

不言
不言原創
2018-09-11 14:41:231092瀏覽

這篇文章帶給大家的內容是關於php用static方法的原因介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

靜態方法不需要所在類別被實例化就可以直接使用。

靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。

靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存。

static全域變數和普通全域變量,static局部變數和普通局部變量,static函數與普通函數的差異?下面本文將一一為你解答。  
(1)全域變數(外部變數)的說明之前再冠以static 就構成了靜態的全域變數。全域變數本身就是靜態儲存方式, 靜態全域變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域變數的作用域是整個原始程序,當一個原始程式由多個來源檔案組成時,非靜態的全域變數在各個來源檔案中都是有效的。而靜態全域變數則限制了其作用域, 即只在定義該變數的來源檔案內有效,在同一原始程式的其它來源檔案中不能使用它。由於靜態全域變數的作用域局限於一個原始檔案內,只能為該來源檔案內的函數公用,因此可以避免在其它原始檔案中引起錯誤。

(2)從以上分析可以看出, 把局部變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。  

(3)static函數與普通函數作用域不同,僅在本文件。只在目前原始檔中使用的函數應該說明為內部函數(static),內部函數應該在目前原始檔中說明和定義。對於可在目前原始檔以外使用的函數,應該在一個頭檔中說明,要使用這些函數的原始檔要包含這個頭檔。

如果能將類別的方法定義成static,就盡量定義成static,它的速度會提升將近4倍。

實踐是檢驗程式碼執行效率的唯一標準,於是趁著下班回家有點時間,做了個小測試:

先上測試程式碼(如果有不對的地方,請大家指正哈):

測試環境:

/test # php -v
PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
/test # uname -a
Darwin 192.168.0.101 13.1.0 Darwin 
Kernel Version 13.1.0: Thu Jan 16 19:40:37 PST 2014; 
root:xnu-2422.90.20~2/RELEASE_X86_64 x86_64
public static function testStatic() {
$i = 0;
$i++;
} 
}
$start = microtime(true);
for($i=0;$i<10000000;$i++) {
$test = new staticTest();
$test->test();
}
echo (microtime(true) - $start) ."\n";
$start = microtime(true);
for($i=0;$i<10000000;$i++) {
staticTest::testStatic();
}
echo microtime(true) - $start;

迴圈執行一千萬次執行結果如下:

##/test #php staticTest.php 

2.2938342094421

1.1871800422668


第二次執行結果:

2.303295135498

#2.303295135498

1.1807670512#2#2#1.1802##1.180767052#2#2#1.180762#1.1802#2#1.1802#2#1.1802#2#1.1802#192#。次以後,都在2.3和1.18附近。可見,雖然沒有文章中說的效率提升那麼恐怖,性能的提升方面確實提升了一倍左右。

因此還是建議:

如果能將類別的方法定義成static,就盡量定義成static,它的速度會提升將近1倍。

對於一個正常的php框架,裡面的類別和方法還是非常多的,如果我們能夠做成靜態方法,還是使用靜態方法比較好,效率比較高。

相關推薦:

PHP類別的靜態(static)方法與靜態(static)變數使用介紹

##PHP靜態變數static的使用介紹_PHP教學

以上是php用static方法的原因介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn