為什麼大多數互聯網公司自己寫 PHP 框架?

是公司自己寫,還是使用開源的框架。為什麼做這樣的選擇,是基於什麼考慮?本人看過很多的公司內部框架,說實話,真沒開源的寫的好,無論是文檔還是易用性。好多人的想法是,如果讓人知道公司開發的框架是用的開源框架,會被人鄙視- -。大家是否也有這樣的考慮?


每個公司的業務邏輯不一樣,拋開那些沒有牛X CTO,都是小渣渣(你以為你很強,其實我們都比較渣 )的公司,可能隨便用一個什麼開源框架,MVC、各種類庫,需要什麼有什麼,公司的業務需求都能滿足。幾乎不考慮性能,不考慮並發,主要是沒人訪問,不管用什麼框架,除了寫過controller、model、view、還會寫jquery,html我也會一點呢,不知道什麼是路由,什麼是設計模式,什麼是模板引擎等等、寫代碼完全是這個樣子的話:

(圖片來源於網路,老爺爺一看就是練過的人吶!)

那其實開源框架沒有什麼不好,降低了PHP的門檻,至少讓了解什麼是框架,鞏固了MVC的學習,提升自我優越感,我也是會框架的人了,讓人們都能輕鬆過上幸福快樂的生活。

聽說你們公司用的YII,我只會1.0版本,2.0的我還沒看,什麼?我只會用TP,不過聽說最近laravel挺火的,我正在看呢。上班三年了,換工作的時候先問面試官,請問你們公司用的什麼框架,天啦嚕,你們用的自己的框架,沒學過啊。

其實我還是建議初學者(特指已經學完PHP基礎語法,並且了解一些開源框架MVC的童鞋們)寫一個自己的框架。

比如說,你可以先看看:

  1. 說過「事情,從現在開始做,都不晚!」的歲寒【利用 Composer 一步一步構建自己的 PHP 框架(一)--基礎準備】
  2. 慕課網有教程,而且講的很不錯的李虎頭【PPPHP框架官網】
  3. 各種其他的之類的

現在來回答題主說的,第二種情況,就是為什麼大多數互聯網公司自己寫 PHP 框架?

因為他們的厲害的CTO覺得業務邏輯完全可以不需要那麼複雜的框架呀。(你猜是不是這樣呢?)

比如跑個mysql的數據腳本,我幹嘛需要模板引擎,我幹嘛需要Redis、Mongodb的操作類庫,什麼?你說不用就不載入,我看著他就煩好不好,你的項目打包100M,我的只有100k。

比如,......

比如,......

比如,......

比如,......

比如,......

再比如,......

這麼多的例子還不足以理解真相?你看,我說的是不是很有幾分道理?

嗚啦啦啦啦啦啦

黑夜不過是兩個人的假期

-------------------這是一條華麗的分割線(現在還流行這個嗎?)--------------

補充:2017-01-18

大神的世界我們不懂,我覺得每一個寫PHP的都應該寫寫自己的渣渣框架!(另起一段) 學學C/C++ 寫個Hello World的擴展還是不錯的嘛。

如何寫一個自己的渣渣PHP框架(1) | 郭貳小姐的博客 - opqnext.com

如何寫一個自己的渣渣PHP框架(2) | 郭貳小姐的博客 - opqnext.com

如何寫一個自己的渣渣PHP框架(3) | 郭貳小姐的博客 - opqnext.com

不然開寫吧…(哪怕沒有我你長點心吧),嗯呢

-----∩_∩------

最後留下交流Q群號:452209691


PHP之父Rasmus Lerdorf(拉斯馬斯·樂多夫)就不看好複雜的PHP框架.

PHP Frameworks Day 2013
Rasmus Lerdorf opinion on PHP frameworks: "They all suck!"
https://www.phpclasses.org/blog/post/226-4-Reasons-Why-All-PHP-Frameworks-Suck.html

Rasmus Lerdorf, the PHP creator,
was invited to give a talk in PHP Frameworks Day conference.
He talked mostly about the latest PHP developments,
but in the question and answers section,
somebody asked Rasmus about his opinion on the PHP frameworks.
That was as straight question about his opinion,
so Rasmus gave a straight answer (near 31m 47s): "They (PHP frameworks) All suck!"
Resaons:
1. Frameworks Execute The Same Code Repeatedly Without Need
(框架重複執行了相同代碼,這是不必要的)
2. Frameworks Require Too Many Interdependent Classes
(框架需要太多相互依賴的類)
3. Needlessly Complicated Solutions
(不必要的複雜的解決方案)
4. Duplicating the Web Server Functionality
(重複實現了Web伺服器本來就支持的功能,如前端控制器模式)
So, are there any frameworks that don"t suck?
Rasmus did mention that he liked CodeIgniter
because it is faster, lighter and 【the least like】(最不像) a framework.

在PHP之父看來,PHP框架並不符合PHP的設計哲學,框架拉低了性能,增加了複雜度.所以有大公司選擇定製適合自己的PHP開發架構很正常.鳥哥在2011年用C為百度開發的Yaf就是個例子,在保證性能的前提下實現了MVC,足夠輕量和高效:

http://www.laruence.com/manual/preface.html
http://php.net/manual/zh/yaf.tutorials.php
http://pecl.php.net/package/yaf
yaf-3.0.4 stable 2016-08-18 支持最新的PHP 7.1

鑒於重型框架不適合PHP每次請求釋放資源的FastCGI運行模式,所以DHH當時作為一個PHP開發者,並沒有選擇在PHP上實現Rails:

早在編寫PHP程序時DHH就開發過一套框架,目的是使PHP能在項目中變得簡潔快速,將程序的界面、控制和數據分離開來,方便團隊間的協作和維護。 Basecamp項目之初,DHH試圖使用自己的PHP框架進行Basecamp的開發,但沒過幾天DHH就發現了一些問題: PHP每次HTTP請求都要初始化資源,這個過程的開銷非常大。 儘管PHP解析器的運行速度快速且沒有缺陷, 但一旦使用框架,那麼每次請求時初始化整個框架使性能的下降非常厲害, 當使用一個很複雜的PHP框架的結果就是整體性能嚴重下降; 同時,PHP語言本身的問題造成了PHP添加跨請求的高級特性相當困難, 這是PHP本身一個很大的限制,但是反過來說,正是這種限制使得PHP始終保持在一個比較簡單的Web語言上面, 而正是這一點才是PHP得以成為互聯網流行Web編程語言的原因。

@楊益

鳥哥說過:

PHP 確實簡單,這也是我們追求的目標,我們希望它簡單,簡單難道不好嗎? 可能有些人會寄希望通過一些複雜的東西來體現自己的優越感,這其實也沒什麼問題。 只是我個人不認可這種態度,我覺得什麼簡單就用什麼唄。 回過頭來說,你說 PHP 簡單吧它也不簡單,PHP 相關的東西現在也有很多,比如一些【很優雅的框架】。 有些框架我自己看半天也會覺得還挺複雜的,學起來費勁。 我自己是用 C,我就是喜歡用簡單的東西,我不太喜歡那種特別複雜的東西,因為要去理解它。 之前我跟別人好像有過一次爭吵,他的意思是說你只要肯學一定能學會,學不會說明你有問題。 對我來說,我會去學也會去看別人的東西,但是用起來一定是用我最順手的東西去解決問題。


看過用過一些開源框架,像Yii、CakePHP、CodeIgnitor, 同時也為某個大型公司開發維護過內部的框架,簡單說說我的觀點:

1. 開源框架好是好,但做 PHP 開發的大多圍繞項目需求走,沒有需要也沒有動力去學一個開源的框架,即便要使用,選擇哪個框架也是個很困難的事。通常就算用了開源的框架,也只是用了其中一部分,大多沒有理解框架設計的原則,一旦需要對框架做擴展時就胡亂來了;

2. 開源框架做的都是通用的需求,而企業內部往往有特殊的需求,自己做框架能夠更切合實際的需求,出現 bug 改正也會比較及時。如果使用開源框架,往往要在深入理解內部原理上下不小的功夫,顯然沒有自己寫的代碼熟悉;

3. 性能偏見,某些人認為大部分框架中繞來繞去的方法調用、為解耦引入的多次層架構,對性能有影響,因而認為自己寫的「簡單」代碼有更高的性能。這類人往往鄙視設計模式一類的東西,出來的代碼當然要更混亂。


因為自己寫的框架雖然短小,但是可以旋轉


用不用開源框架,跟被人鄙不鄙視一點關係也沒有。那是個人的偏見

如果項目時間趕,而且公司又沒有成熟的開發框架,那麼選擇開源框架就可以縮短開發周期。

如果時間允許,開發團隊人員多一些,那麼還是公司獨立開發一套好一些。在安全性上也會比較有保證。


2016年9月補記:

3年多過去了,PHP7.1已經發了RC。PHP語言本身有很多改進,儘管還是有很多歷史造成的坑很難填平。另一方面,框架和生態也有很多改進,比如lavarel框架。

在現在這個時間點上看,自己寫PHP框架的必要性已經下降了很多。如果說現在還在自己寫框架(比如我現在所在公司),主要原因,可能是維護歷史遺產(因為遷移到新框架風險更高)。

不過,國內PHP人群中常見的「PHP是世界上最好的語言(還真TM有人相信)」、「語言就是個工具(言下之意所有工具都一樣)」、「語言不重要(在真正編程的人群中,這種話只有頂尖的大師有資格說)」之類的傻逼觀點一點也沒有衰退。PHP5到PHP7每個大小版本一直在不斷努力改進和填坑,諷刺的是,許多寫PHP的碼農對此一點也不領情。

以下文字(包括補充)為2013年7月所寫:

簡單說,因為PHP這門語言太爛了,以至於很難寫出足夠好的框架。這一方面導致許多人認為自己能寫得更好。另一方面,要寫到足夠好的,最終就非常不象PHP。所以或者覺得要麼不如直接用其他語言(寫的框架),或者認為這丫已然不是PHP了。

補充:

關於PHP的爛:框架本身是要提供強約束,比如分層隔離,禁止業務層訪問表現層,但PHP的大量函數都在全局命名空間下,你無法禁止對這些函數的訪問。歸根到底,PHP本來就是設計為對於Web層的抽象。既然要寫框架,則隱含前提是認為PHP自身的抽象不夠好。重造一層抽象之後,整個就和傳統PHP背道而馳了。從某種程度上說,PHP的哲學是反框架的。


事實是,他們技術總監想寫個框架練練手,所以就忽悠ceo,說怎麼怎麼需要。基本都是這樣的原因。

普通mvc框架完全沒有自己寫的必要,像鳥哥的yaf,phalcon這種才是需求產生的。


因為要有個性


之所以要開發軟體,是為了解決用戶需求。

之所以要開發新版本的軟體,是因為舊版本會存在以下問題:

1.缺少功能,無法滿足用戶需求。

2.性能不行,需要重構。

3.Bug太多,不符合可用性要求。

4.二次開發代價太大,不如重構。

5.維護成本過高,不如重構。

6.使用成本過高,不如重構。

另外,我並不清楚題主在軟體方面【寫的好】的量化評判標準,不過建議題主去看看星際爭霸的開發流程,看看世界級的程序員,寫的東西,是否達到你【寫的好】的標準。


每個公司都想有一套屬於自己的系統


心情好,我也來吹個牛逼

我的經歷是資金決定的。

當年公司論壇從vbb改版的時候,一個人,一台web,二台mysql。

十五分鐘內在線五萬人,這是公開的。uv pv不方便說了。資料庫120G

你只要多寫一個include,web就掛了,不誇張哦。

為了性能公用文件都寫一起,一個include。

就是很多人噴的糟糕的架構模式。

可是公用的框架。

不要說很多框架里include之前的file_exists判斷了。

還有更搞笑的smarty。他那個緩存里有多少filemtime fileexists判斷有人測試過嗎。

當年php4里還沒有這個操作的系統級緩存,即使現在有了,壓力大了其實也是差別還是很明顯的。

咱是老草根程序員,第一台伺服器是賽揚666,512內存,普通硬碟的台式機。php3開始用。

習慣以極限性能為主。

公開的框架真心用不下去。

你給我十台32核伺服器我也會給你來個分散式。各種大而全的框架。

但是反過來你會嗎?

單台的極限性能。

現在很多程序員基礎性能瓶頸都搞不清,張口分散式閉口大數據什麼什麼框架。

也就大型公司有錢可以混混。

換個沒錢的剛起步公司。

什麼設計模式架構都是扯淡呢。

省錢才是最好的架構。

這裡可以提出一個硬需求。

有興趣的可以自己寫代碼試試。

我們是論壇,一列表是五十個主題,一個主題是五十個回帖,公安給了七萬個禁詞,要求入庫時不許禁止,顯示的時候動態禁止。而且要求禁詞他們可以動態管理。

也就是對五十個內容都做一個七萬禁詞的過濾。

能搞定的就沒幾個。

跑的過程中可以統計一下佔用的內存和這段代碼的執行時間。

沒經驗的人,光是這七萬個詞進數組增加的cpu就傻眼了。

現在也不會,他們會再起一個服務做api然後提交給api分散式解決。

其實php寫好了這個可以解決。


  1. 公司有沒有自己的框架其實要看公司自身的實力,PHP更多的是一些創業型的公司使用,從成本上來說不適合自己獨立開發框架,因為一個良好的框架,業務,安全,性能等等都需要很長時間來考驗。
  2. 當然有些小公司也會自己寫框架,原因很簡單自己的業務簡單也不需要那麼複雜的框架,借鑒一下MVC開發思想,寫一個簡單的框架也沒有那麼複雜,另外網站的性能也不是PHP這個框架所決定的,linux和websever的優化和配置以及對資料庫的優化和使用都是很重要的因素。
  3. 另外關於說PHP不適合大型網站構架純粹胡扯,不是說他不適合,而是早期的PHP不是很成熟(相對於java和c來說),而且早期的web程序員主要也是以java語言為主,後來雖然PHP技術成熟後,但他們(早期java)佔據了公司的領導崗位,對以後的項目會本能的採用自己熟悉的語言和知識。PHP的劣勢是:1:沒有佔據早期開發優勢(人們一般有先入為主的思想),導致現在PHP不能成為大網站的主導語言,2:屬於草根開源語言,在面臨bug問題上面,只能等待或者自己做擴展,不像甲骨文可以付費解決問題
  4. 就性能而言,PHP適合快速迭代的開發模式,例如新浪微博就是採用PHP,一個良好的LAMP架構支持百萬級的業務量還是相當easy的


之前搞了一個小MVC框架練手,然後用在了一個不太重要的小項目裡面。然後現在坑新同事坑到了現在 :)


因為老闆不懂,老闆覺得自己開發才高大上。

寫的人也正好練練手,提示自己價值。

面對各種亂七八糟的需求,自己改起來更方便才是主要的。

如果寫的不好,這個攤子別人一看就蒙逼,沒人願意接手,坑死後來者。

這公司與你共存亡了,離了你也行,但是得找個必需高你兩級的大手子來接手。

最後,

陰險的程序猿。


簡歷驅動開發模式


這個要根據各個公司的需要了,感覺一般有一定規模的公司都會自己寫適合自己項目的框架,然後不斷的完善。如果用開源的,學習成本是一方面,另一方面,不一定適用。


很多民間的網站,都是不用框架。。

從開源項目里抽出需要的類庫和函數,就夠了。

不用框架都能接受,自己開發框架有什麼問題么


php比較簡單且速度快,開源又免費,lamp(linux操作系統+apacheWEB伺服器+mysql資料庫+php)架構成熟穩定,所以很多網站採用。


肯定是開源的好,人家幾千人寫的東西經過幾代人手的框架還不如你公司內部幾個弱智寫的那麼好??也就只有自己用自己寫的框架才會有相對其他人的優越感吧?然後又有一群人說性能,開源框架怎麼怎麼慢怎麼怎麼效率低?那你用純原生PHP寫啊?又說維護很難??那你怎麼不用開源框架?你自己寫的框架其他人還要看你文檔才可以維護吧?要是開源的大家都用的人家基本可以直接維護,而不用進來你公司還要花點時間去看你的框架,還有幾個人寫的框架真的是垃圾!


個人覺得用node.js做為個人網站技術選型比較好,節約伺服器資源,性價比高,我的博客就是單核,512M內存centos,可以試試速度是不是杠杠的

rin部落-web技術博客:http://www.9958.pw


推薦閱讀:

怎麼看待豆瓣人對於粉絲的關注?
隨著人們在網上的社交行為越來越豐富,網路上的人格是否會取代線下的人格?
如何看待新浪微盤停止個人免費服務,快盤退出個人雲存儲市場?
有哪些沒有二十年以上網齡就不會知道的事情?
樂視為什麼能圈到這麼多人才?

TAG:互聯網 | PHP | PHP框架 | WebFramework |