溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php為什么要用static方法

發(fā)布時(shí)間:2020-11-04 10:32:04 來源:億速云 閱讀:116 作者:小新 欄目:編程語言

這篇文章主要介紹了php為什么要用static方法,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

php用static方法的原因:1、全局變量的說明之前再冠以static 就構(gòu)成了靜態(tài)的全局變量;2、static函數(shù)與普通函數(shù)作用域不同,僅在本文件;3、如果能將類的方法定義成static,就盡量定義成static,其速度會(huì)提升將近4倍。

php用static方法的原因:

(1)全局變量(外部變量)的說明之前再冠以static 就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲(chǔ)方式, 靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無不同。這兩者的區(qū)別在于非靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。

(2)從以上分析可以看出, 把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍?! ?/p>

(3)static函數(shù)與普通函數(shù)作用域不同,僅在本文件。只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定義。對于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說明,要使用這些函數(shù)的源文件要包含這個(gè)頭文件。

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

實(shí)踐是檢驗(yàn)代碼執(zhí)行效率的唯一標(biāo)準(zhǔn),于是趁著下班回家有點(diǎn)時(shí)間,做了個(gè)小測試:

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

測試環(huán)境:

/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
<?php
class staticTest {
public function test() {
$i = 0; 
$i++;
}
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;

循環(huán)執(zhí)行一千萬次執(zhí)行結(jié)果如下:

/test # php staticTest.php
2.2938342094421
1.1871800422668

第二次執(zhí)行結(jié)果:

2.303295135498
1.1807670593262

執(zhí)行很多次以后,都在2.3和1.18附近??梢?,雖然沒有文章中說的效率提升那么恐怖,性能的提升方面確實(shí)提升了一倍左右。

因此還是建議:

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

對于一個(gè)正常的php框架,里面的類和方法還是非常多的,如果我們能夠做成靜態(tài)方法,還是使用靜態(tài)方法比較好,效率比較高。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享php為什么要用static方法內(nèi)容對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI