一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - PHP教程 - 詳解php用static方法的原因

詳解php用static方法的原因

2019-09-07 15:43laozhang PHP教程

這篇文章給大家分享了關(guān)于在PHP中使用static方法的原因以及相關(guān)實(shí)例代碼,有需要的朋友們參考下。

靜態(tài)方法不需要所在類被實(shí)例化就可以直接使用。

靜態(tài)方法效率上要比實(shí)例化高,靜態(tài)方法的缺點(diǎn)是不自動(dòng)進(jìn)行銷毀,而實(shí)例化的則可以做銷毀。

靜態(tài)方法和靜態(tài)變量創(chuàng)建后始終使用同一塊內(nèi)存,而使用實(shí)例的方式會(huì)創(chuàng)建多個(gè)內(nèi)存。

static全局變量和普通全局變量,static局部變量和普通局部變量,static函數(shù)與普通函數(shù)的區(qū)別?下面本文將一一為你解答。  

(1)全局變量(外部變量)的說(shuō)明之前再冠以static 就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲(chǔ)方式, 靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無(wú)不同。這兩者的區(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)變量后是改變了它的作用域,限制了它的使用范圍。  

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

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

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

先上測(cè)試代碼(如果有不對(duì)的地方,請(qǐng)大家指正哈):

測(cè)試環(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í)行一千萬(wàn)次執(zhí)行結(jié)果如下:

/test # php staticTest.php

2.2938342094421

1.1871800422668

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

2.303295135498

1.1807670593262

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

因此還是建議:

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 龟甲情感超市全文阅读 小说 | 日韩一区二区三区不卡视频 | 成人蜜桃网 | 日本护士撒尿xxxxhd | 国产亚洲精品日韩香蕉网 | 美女黄a | 奇米激情 | 男人v天堂 | chinesexxxxhd人妖 chinesespanking调教 | 亚洲 国产精品 日韩 | 国产精品一区三区 | 91久久国产成人免费观看资源 | 欧美精品综合一区二区三区 | 久久久大香菇 | 久久亚洲国产成人影院 | 欧美日本道免费一区二区三区 | 91免费永久在线地址 | 私人影院在线播放 | 男同桌扒开女同桌胸罩喝奶 | 校草让我脱了内裤给全班看 | 色男人的天堂久久综合 | 精品久久伦理中文字幕 | 四虎国产精品免费久久麻豆 | 欧美日韩国产中文字幕 | 啾咪成人漫画免费 | 久久精品国产清白在天天线 | 亚洲国产99在线精品一区二区 | 国产图片综合区 | 久久99国产综合精品AV蜜桃 | 日韩精品一区二区三区中文版 | 禁忌h1v1怀孕 | 国产福利片在线 易阳 | 91麻豆精品激情在线观看最新 | 国产精品久久久久不卡绿巨人 | 天堂久久久久va久久久久 | 亚洲视屏在线观看 | 男女做受快插大片 | 国产91网站在线观看 | 国产成人精品一区二三区在线观看 | 成人天堂入口网站 | 欧美成人aaaa免费高清 |