想深入學習php面向對象,推薦一些好書唄?

我PHP面向對象水平不怎麼好,學習laravel和yii框架的時候,感覺有點力不從心,還是基礎太差了吧,需要回去深入學習一些面向對象


多看一些對面向對象編程的批評,有助於正確使用OOP.

「面向對象編程是一個極其糟糕的主意,只有矽谷里的人能幹出這種事情。」

— Edsger Dijkstra(圖靈獎獲得者)

「面向對象設計是用羅馬數字做計算。」

— Rob Pike(Go語言之父)

「『面向對象』這個詞包含很多意思。有一半是顯而易見的,而另一半是錯誤的。」

— Paul Graham(美國互聯網界如日中天的教父級人物)

「實現上的繼承就跟過度使用goto語句一樣,使程序擰巴和脆弱。結果就是,面向對象系統通常遭受複雜和缺乏復用的痛苦。」

— John Ousterhout( Tcl and Tk 的創始人) Scripting, IEEE Computer, March 1998

「有時,優雅的實現只需要一個函數。不是一個方法。不是一個類,不是一個框架。只是一個方法。」

— John Carmack(id Software的創始人、第一人稱射擊遊戲之父)

「面向對象編程語言的問題在於,它總是附帶著所有它需要的隱含環境。你想要一個香蕉,但得到的卻是一個大猩猩拿著香蕉,而其還有整個叢林。」

— Joe Armstrong(Erlang語言發明人)

「我一度曾經迷戀上了面向對象編程。現在我發現自己更傾向於認為面向對象是一個陰謀,企圖毀掉我們的編程樂趣。」

— Eric Allman(sendmail的創造者)

面向對象是90年代「結構化編程」的萬金油,風靡一時,但很難說它就是那些用它開發出來的東西的「終極」編程模式。 並且,至少它的這種最流行的形式可能我帶來極大的危害,極度的增加複雜性。 繼承帶來的危害遠超過好處。這「代碼復用」的令人質疑的幌子下, 我們的環境中被愚蠢的增添了大量的毫無用處的複雜性, 使得必須引入大量的語法上的簡寫來讓這混亂得到最低限度的管理。

(轉載結束)

過程式編程中,函數是代碼復用的最小單元.

體現了: 程序=數據結構(如數組)+演算法(如函數)

面向對象編程中,類是代碼復用的最小單元.

用多重繼承來實現類重用是邪惡的,所有又出現了trait這個對多重繼承的補丁.

所以說,不要盲目迷信面向對象編程,也不要盲目否定過程式編程和函數式編程.


下面的書適合你。

還有


先找個對象就知道,面向對象的理念了,嘿


推薦這本,不過裡面的例子都是用java寫的


LZ想深入學習PHP面向對象的話,看書的同時,我還是建議最好結合項目代碼,理論+實踐。我看其他幾位大神推薦的書都不錯,這裡我給你推薦幾個開源的PHP面向對象開發的項目吧,比如我們團隊使用的zentaoPHP框架,MVC模式,完全開源,代碼簡單,而且配置項也是用的面向對象的思想,而不是數組,非常任性話,適合拿來學習研究下。

這個不過癮的話,可以再看下基於該框架研發的禪道項目管理,蟬知企業門戶,然之辦公協同,這幾個都是開源項目,LZ感興趣的話,可以學習研究下,一定會對你有所提高。


看書也不一定能真正明白 多寫多看 某天恍然大悟


modern php 中文版

帶你走進真正的php 。

head first 設計模式

唯一看的不頭暈的設計模式的書,代碼是java的,不過寫php誰不會一點java不是。反正咱只講理論。


我個人並不是很同意排斥面向對象,首先我覺得最糟糕的不是面向對象語言,亦不是函數式語言,而是第三類:些把函數式和面向對象混合的語言,比如帶頭的C++,腳本中的php等等,這些既能使用結構編程,又能使用面向對象,導致寫出來的代碼千幾百怪,不得不把思維轉換來轉換去去適應不同的模式,個人更喜歡java,C#的思想,尤其是C#語言,雖然推廣很不咋地,但是語法來說絕對優於同時代的java(我只論語法優勢,java黨勿噴,不信你們仔細看看C#入門語法,dynmic,運算符重載, async 和 await 非同步編程,即使我個人是寫java居多,主要因為個人是linux黨,以前雖然在linux上用mono寫C#,也做過http://asp.net開發,但mono對我來說還是和.net差距太大了)

回到話題為什麼我喜歡java和C#的語言特點呢,首先他們是「很純」面向對象的語言。java8之前都不允許函數式編程,所有的一切都必須是類的一部分,中間文件.class也都是以類為單位的,這才是面向對象,所有的函數,以下稱為方法,都必須是從對象中獲取,不能憑空定義,為什麼說C#我更喜歡,不說別的,運算符重載這一項我都覺得C#更加面向對象,+,-,*,/這些符號也不再是簡單的符號,而是對象的方法,那些喜歡吧面向對象和函數式混在一起的語言,導致了大量程序員寫出的代碼,一會面向對象,一會函數式,代碼不堪入目,真正的程序員應該深知代碼是藝術,而不是純粹的工具

代碼之美使開發者快樂!

如果是腳本的話,我也是從php,shell過來的,因為早期瘋狂著迷於linux,然而,我現在覺得php的語法真的很糟糕,我只會用它來應付一些商業項目,主要也不過是web方向的,那些針對http的應用!但是我一點也不喜歡寫php,是的,他很快,php7做web開發可以吊打python,ruby,可是寫起來我不知道該用函數式還是對象,一會用對象思想寫控制器,模型,一會用函數式寫函數庫?!我的天哪,用了框架之後,我感覺框架整體是面相對象,可是我自己寫起來就跟函數是一樣,我都不需要考慮類了,再者我最討厭寫count(數組),sizeof,為什麼不能是.size或者.length呢?

腳本的話,ruby的思想更純,一切皆對象,我覺得如果不考慮靜態語言和腳本的差異的話,ruby要比上述的C#和java更加的純面向對象化,他的數組符號[]也是可重載的方法,他的字面值也可以調用相應的方法,甚至他的class,「類」本身也是一種對象(java雖然也是這樣),不過他是腳本,沒有main函數,他也可以函數式,這我覺得還是一點點遺憾,若是ruby解釋器和java一樣強制規定方法在類中,文件以類為單位,類可以有主函數來執行入口,那一定更加美好了

說了這麼多面向對象,我不是痴迷於面向對象,相反,我愛寫函數式的代碼,這些一般都是我個人愛好,比如爬蟲或者系統快捷腳本等,這些小型的應用,更加適合函數式,因為我不需要考慮什麼設計模式,或者多寫很多class文件,new很多對象,也不需要為了一個方法而去新建一個類,或者擴展一個類

所以C語言依然是極其優美的語言,如果腳本語言也能明確自己是面向對象還是函數式就更好了,而不是一味的追求面向對象,像php一樣生硬的把面向對象塞進語法中,導致混合寫法,說實話,我還是很喜歡用php的函數式去寫爬蟲什麼的以及其他小應用


推薦閱讀:

PHPMailer又被發現嚴重漏洞 危b及數百萬網站
虛驚一場?PHPMailer漏洞雞肋無比
PHP 下載 url 遠程圖片
(PHP、.net、JSP)哪一隻能實現花生殼的功能?
為什麼go語言能在中國這麼火?很多公司的各個業務線都在轉go語言,從php到go,從C++到go。

TAG:PHP | 面向對象編程 | PHP學習 |