php中為什麼要用static方法

2021-08-27 20:39:35 字數 1789 閱讀 2139

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)

/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 static function teststatic()

}

$start = microtime(true);

for($i=0;$i<10000000;$i++)

echo (microtime(true) - $start) ."\n";

$start = microtime(true);

for($i=0;$i<10000000;$i++)

echo microtime(true) - $start;

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

/test #php statictest.php 

2.2938342094421

1.1871800422668

第二次執行結果:

2.303295135498

1.1807670593262

因此還是建議:

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

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

PHP中變數為什麼要用

c vb php中 可以利用值 數和字串 的位置 1 函式引數 2 運算子運算元 包括vb中的賦值語句 3 陣列下標 包括phpkey標 能產生值 數和字串 的位置 1 簡單變數 2 陣列元素 3 結構成員 4 函式 5 常量 一般字面常量 c和php中define常量 vb中const常變數 6 ...

Python中為什麼要用self?

參考文章 self的含義與基本用法 python中為什麼要使用self 注意到文章中的一句話,避免非限定呼叫造成的全域性變數。舉個例子來談談我對這句話的理解 class father def init self,name self.name name def selfdemo self print ...

為什麼要用 enable shared from

樓主 hma if you think you can,you can.panrainbow 憂鬱淡藍 於 tue nov 9 11 48 38 2010 提到 引入enable shared from this的原因是可以實現返回值為指向該類本身的 shared ptr,為什麼以this為拷貝構造...