為什麼面試時經常問到 PHP 設計模式?PHP 設計模式有什麼用?

個人感覺所謂php設計模式,就像36計一樣,不是你天天讀36計,就可以自詡自己的36計很牛逼,同樣你不知道36計,你一樣可以會用36計而已,何故面試官以PHP設計模式來取人?


設計模式和php有毛關係?遇到問這問題的面試官直接走人吧


你連知道都不知道,

也就不能穩定的根據理論來進行實際應用,

偶爾的實際應用,只是靈感爆發,但是並不穩定


設計模式體現一定的編碼技巧,如果對設計模式理解比較透徹,說明你技術高。模式不是背出來的。那都是大師們的智慧精華。

簡歷裡面必須寫的「精通...」,「熟練...」。什麼叫精通?什麼叫熟練?

面試官的目的不是羞辱你,或者展示自己的牛逼。他是要通過聊天來看你有多精通,多熟練。

再唧歪下,我覺得那些問設計模式的人估計很多都是從java轉過來的,他的腦筋還沒完全轉過來。


個人認為設計模式在一般的項目中用的很少,尤其是在後期加入某個開發團隊中,畢竟一開始選擇開發項目都會用高效快速穩定的框架來作為解決方案,沒有哪個團對說是要自己開發一套框架實際運用到項目的開發,而設計模式框架中的體現最為頻繁,例如MVC框架中的創建資料庫實例就是使用單例模式。所以如果一開始從底層寫一些拓展或者封裝的API,可能會涉及到設計模式的運用。如果真的對設計模式感興趣的話,看看開源框架一些核心的實現,就能夠了解一些,至於能不能應用到具體的項目當中,很難說。

另外要說的一點就是,個人認為設計模式是一種編程思想的體現,這是對性能、安全方面很多的經驗總結。對於大多數邏輯性縝密的人來說,平時多思考,多實踐,在真正需要了解設計模式的時候,學習起來也不會很難。

以上僅僅代表個人觀點,勿噴。


不止php。剛剛開始編程的程序員,整天寫業務。調用的方法也是框架封裝好的。實際上框架裡面採用了大量的設計模式和模式的變體。但是為什麼要求的普通程序員掌握設計模式呢。如果你掌握這些設計模式還有其他大量編程技巧,便知道什麼場景下採用哪種代碼的設計是合理的,穩定,可擴展的。節省了大量在設計上踩坑的時間。然後當你寫擴展的時候,因為無法使用現有的框架,所以不得不自己設計代碼結構,所有工作全靠自己,這個就是該使用設計模式的時候了。

其他答主也提到過,設計模式就是一種編程技巧。之所以感覺沒用,其實還沒有遇到使用的場景。


我很難想像一個連設計模式都不知道的人他怎麼就精通OOP編程了...在我面試的時候,設計模式是必須要問的,雖然我們真的有時候很少去運用他,但是你又無不在使用它,說設計模式不好的人,是因為你本身編碼水平就很低,濫用而已。模式一定實在合適的場合使用它,沒有絕對。


如果只是使用了PHP的繼承功能,你設計出來的軟體並不是面向對象的設計,因為這並不能提高代碼的重用性和靈活性。

面向對象的原則是「組合優於繼承」,因為組合可以以多種方式動態的處理任務。

雖然對象的組合會導致代碼的可讀性下降,但會讓系統更加靈活,復用性更高。

設計模式是很多前輩花費大量精力總結的經驗,是經過檢驗的高效的一系列對象組合方式。

所以,在學面向對象設計的時候,特別是如PHP、java、python這些語言,設計模式是必須要懂的,不然設計的一堆東西和以前過程式編程差別不大。

如果是入門的話,建議看看這個《PHP設計模式教程》,慢慢消化,起始是很容易理解的


設計模式是面向對象的編程技巧,不能說會就nb,但是設計模式本來就是前人在編碼的時候總結出來的技巧性寫法,他不局限在語言。

學一學吧,你會發現,很有趣,很爽!


二十多個設計模式!你一個都說不出來,我也是醉了!單利,簡單工廠,註冊器,﹉多的一比!語言的精華就在數據結構,演算法和設計模式。設計模式就是用最少的錢干最好的事!


本人認為設計模式是體現一個人的工作經驗的東西,因為當自身的代碼,不能滿足業務需求需要,就會想各種方法去解決這一問題,設計模式會體現一個人的思想


簡單說點:

三線城市小公司,碼農,我沒去過北上廣,連省都沒出過,我們公司分前端(UI),服務端(PHP),移動端(android和IOS),我說句實話,這三端里水平最差的就是服務端(PHP),對.我也是個寫PHP的,我來公司比較晚,來的時候基本項目都定型了,負責的只是往上面迭代功能而已,但就是這個迭代功能,讓我崩潰,

用的是TP3.2, MVC只有三層(這是我們技術主管說的),所以,一個model可以3000行,一個controller可以1萬5千行,我就納悶了MVC誰TM說只有三層了?功能定義混亂無比,別說設計模式,就是封裝都亂七八糟,同樣的查詢語句滿天飛,一直在重複造輪子,所以我寧願去寫新功能,也不願意去改原有的舊功能,完全的面向過程,後來有一期功能我加了logic層同時把所有的第三方服務封裝了一個service,結果被指責為破壞了MVC的原則....

我把我的構想和移動端說了一下,他們很贊成的,OOP啥的他們一聽就懂,Java的分層更加細膩,所以在某些編程上的交流,我更願意同移動端的聊聊

終於在半年以後,項目的冗餘和維護讓所有人苦不堪言,於是決定換框架!

問題來了,讓每個人出個方案,推薦一個可行的框架出來,讓大家學習然後重開項目.

我準備了一下,推薦了laravel,別噴,我喜歡乾淨的代碼,簡潔寫法,和實用的擴展(僅此而已),

整個服務端就我自己會laravel.

然後技術主管最後決定:用 YII2,因為整個部門只有他會YII2.

培訓開始了

發現唯一會YII2的不知道靜態方法的調用方式,也不知道依賴注入,唯一知道的就是只有三層的MVC,

他講的最多也是這三層的MVC.

此刻,我體驗的是冰冷刻骨的絕望

你可能會問,說了一大堆都是吐槽

其實我想說:

又臟又混亂又冗餘的代碼並不可怕,可怕的是我們習慣於這樣而且享受這樣.

當你被亂鬨哄的代碼折磨時

當你不想日復一日的重複造輪子時

當你覺得你該學點啥時

你會自然而然的想到設計模式

面具之下的不僅僅是血肉之軀 ,而是一種思想 ,思想是殺不死的

面試問設計模式,你真的以為他在問技術?

設計模式這玩意,用嘴說能學到?

不去多練,多想,多寫,設計模式能弄懂?

沒有學習能力,沒有堅持,能學會?

不懂基本的設計模式,你說你會OOP?

如果我是面試官,我也一樣會問你 "說說你會什麼設計模式,具體說一下"


我也經常問設計模式問題來了解應聘者的編程能力或對面向對象編程的想法,如果應聘者說不了解,那就不再問這方面的問題,不是用來決定合不合適。

設計模式提供在某些場合下如何更好的使用繼承和聚合。我把設計模式當做代碼可擴展的解決方案,平時也只是對經常修改的代碼才想想能不能用。在實際項目很多人都會有用到設計模式一些思想,只是不知道。沒有什麼PHP設計模式、Java設計模式,都是一套。

php在面向對象還是比較弱,在此說的不是它的功能不全,而是效率不行,擴展與性能,往往是要放棄擴展,甚至不用類,這時設計模式一無是處。


php有設計模式?設計模式,應該是通用的吧,只是不同的語言里可能有不同的實現而已。

聽說有一本非常出名的Gang of Four寫的《Design Patterns: Elements of Reusable Object-Oriented Software》,也許有用

如果你會設計模式,那可能代碼質量更高一些吧,僅個人猜想


偶爾面試會問這個問題,設計模式背的滾瓜爛熟不帶表你狠牛逼。但項目中沒用到過設計模式,可能是項目規模不夠大,結構相對簡單。


設計模式會用到,只是場合比較少。設計模式在面試時候無非就成了理論了,和數據結構演算法之類無二


內功心法嘛 讓你招式更猛而已 代碼無非是希望穩定 健壯 快速 安全 可復用 你咋寫都能滿足上述要求 就相當於會了獨孤九劍 啥心法都不需要


php不是用來快速開發的嗎,如果要用設計模式的話,當時選型怎麼不用java?


我在面試中一般只是會提一下,如果不知道就繼續問業務相關的,因為設計模式只是編程技巧,在程序中無處不在,比如代理模式,單例模式。只是你不知道這種寫法的學名吧。不過精通設計模式和使用場景的人寫的代碼質量會高很多。


推薦閱讀:

Windows 下基於 IIS 伺服器的 PHP 環境怎麼搭建?
php如何進階?
如何利用PHP構建個人小型博客?
深入研究PHP源碼實現,以達到編寫PHP擴展與改寫原有擴展的深度,應當從哪裡入手?應當是怎樣的學習步驟?
我接觸PHP開發三年多了,大家眼中的高級PHP工具有哪些?都是做什麼的呢?

TAG:PHP | 設計模式 | PHP開發 | PHP學習 |