php靜態方法到底應不應該使用?

來源:互聯網
上載者:User
起因是因為有人建議盡量別使用 靜態方法,但是現在有的架構( laravel5 & yii2又大量使用 靜態方法,讓我產生了矛盾。度娘告訴我 靜態方法會一直佔用記憶體,但是 速度會比動態方法快動態方法速度慢但運行完成後記憶體就銷毀了。。。

測試環境如下(好像環境沒有什麼卵用?):

shellLinuxMint 17PHP 5.6.9 (cli) (built: Jun 22 2015 00:06:37)

測試代碼如下,很不專業的樣子,望斧正:

php';$begin = microtime(1);for ($i=0; $i < 1000000; $i++) {     (new Test())->dongtai(2);}echo microtime(1)-$begin,'
';printf('memory usage: %01.2f MB', memory_get_usage()/1024/1024);echo '
';$begin = microtime(1);for ($i=0; $i < 1000000; $i++) { Test::jingtai(2);}echo microtime(1)-$begin,'
';printf('memory usage: %01.2f MB', memory_get_usage()/1024/1024);

測試結果如下:

memory usage: 0.23 MB1.0004889965057memory usage: 0.24 MB0.86434984207153memory usage: 0.24 MB

那麼問題來了:

  1. 靜態方法到底是不是如度娘所說,速度快但記憶體無法及時回收,動態方法速度慢但能及時回收記憶體
  2. 除此之外是否還有其它區別
  3. 是否不建議大量使用靜態方法或者壓根就不建議使用靜態方法
  4. 我問這個問題之前可是問過度娘的啊,就是因為眾說紛壇,SO。。。

回複內容:

起因是因為有人建議盡量別使用靜態方法,但是現在有的架構(laravel5 & yii2又大量使用靜態方法,讓我產生了矛盾。度娘告訴我靜態方法會一直佔用記憶體,但是速度會比動態方法快動態方法速度慢但運行完成後記憶體就銷毀了。。。

測試環境如下(好像環境沒有什麼卵用?):

shellLinuxMint 17PHP 5.6.9 (cli) (built: Jun 22 2015 00:06:37)

測試代碼如下,很不專業的樣子,望斧正:

php';$begin = microtime(1);for ($i=0; $i < 1000000; $i++) {     (new Test())->dongtai(2);}echo microtime(1)-$begin,'
';printf('memory usage: %01.2f MB', memory_get_usage()/1024/1024);echo '
';$begin = microtime(1);for ($i=0; $i < 1000000; $i++) { Test::jingtai(2);}echo microtime(1)-$begin,'
';printf('memory usage: %01.2f MB', memory_get_usage()/1024/1024);

測試結果如下:

memory usage: 0.23 MB1.0004889965057memory usage: 0.24 MB0.86434984207153memory usage: 0.24 MB

那麼問題來了:

  1. 靜態方法到底是不是如度娘所說,速度快但記憶體無法及時回收,動態方法速度慢但能及時回收記憶體
  2. 除此之外是否還有其它區別
  3. 是否不建議大量使用靜態方法或者壓根就不建議使用靜態方法
  4. 我問這個問題之前可是問過度娘的啊,就是因為眾說紛壇,SO。。。

主要是語義上的差別,執行個體方法(你說的動態方法)與執行個體有關,靜態方法與執行個體無關。
要調用執行個體方法先要建立執行個體,建立執行個體可能有開銷,但效能上的差別並不重要,主要還是看語義。

個人的觀點是在適合的時候使用就行了,存在既有其存在的價值嘛。

比如Yii2中的helpers方法,你總不能先new下,然後在調用吧。

產生靜態檔案的話會好點吧

這點記憶體完全不是你考慮的範圍 先保證資料庫沒瓶頸再說吧

該出手時就出手,沒必要就別出手

PHP的物件導向系統效能沒有面向過程高!千萬別用任何對象!一定要只用用面向過程的方式寫!
PHP的架構都沒有原始PHP直接輸出HTML效能高!千萬別用任何架構!一定要直接用PHP輸出HTML!
逃)

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.