<轉>PHP靜態類 Static Class 研究


介紹:

靜態類常被用作工具類或者無狀態的抽象。舉個例子,在 C# 中就有個類 System.Environment 可以訪問這個程序所運行機器上的命令行屬性、當前文件夾、以及機器名稱之類的信息。在PHP中,現在只能使用一個只包含靜態方法的抽象類來代替。靜態類是 非常有用的一個工具,作為工具容器,它可以實現很多復雜的靜態繼承,這也正式我們提出這個提議的初衷。

聲明:

PHP靜態類 Static Class 研究 - PHP程序員 - 李國華【PHP程序員C++】博客

模型特征:

一下特性會在靜態類中實現:

1、被聲明為靜態類的類不允許包含任何非靜態成員

2、抽象靜態類中的靜態方法不允許調用,它必須先被繼承。

3、在靜態類中,允許抽象的靜態方法。(莫名其妙?)

4、靜態類不允許含有 構造函數、析構函數、動態攔截函數(本人理解為魔術函數)以及 __toString()。

5、靜態類不允許繼承自非靜態類。

6、為了向下兼容,目前含有靜態成員的抽象類/非靜態類的行為不會被改變。

7、在抽象類中添加 __setStatic() 以及 __getStatic() 以代替 __get() 、 __set()。

8、靜態類不能被實例化

9、靜態類可以實現自只包含靜態方法的接口==============================================

那么php中使用靜態類是否比非靜態類效率更高?
第一:兩者模型無關的情況下。靜態方法訪問比生成對象實例要理論上更合理。 
第二: 就效率上講,一個靜態方法訪問,並不比生成一個實例對象訪問要來得快。你可以測試便知。就我在5.3下屢試的結果,反而是靜態訪問要慢一絲絲。
第三但是,這里要考慮到一種情況。比如你有10個業務類。里面都要調用數據庫訪問的類,那么在這10個業務類里去統統new一遍db類,或者在外部new一遍db類然后用接口方法傳到這10個業務類里。自然不如把db類的方法設置成靜態方法。然后靜態方式調用。 

所以總結:
你要只在一個地方用,其實從程序上講差不多。要看模型的關系。如果多個地方都在調。靜態自然划算。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM