提這個(gè)問題的緣由其實(shí)是我在知乎上看了這么一個(gè)回答:
PHP編程中有哪些常見的低級(jí)錯(cuò)誤?
http://www.zhihu.com/question...
其中提到的錯(cuò)誤做法:把Class當(dāng)名字空間來用,method就是套了Class的function
這樣做有什么不妥之處呢?
擁有18年軟件開發(fā)和IT教學(xué)經(jīng)驗(yàn)。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項(xiàng)目經(jīng)理、高級(jí)軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...
用過程式結(jié)構(gòu)化編程就是"思想固化"?我看把"面向?qū)ο?當(dāng)成放之四海而皆準(zhǔn)的"萬金油"才是"八股文般的思想固化"吧,甚至提出完全面向?qū)ο筮@種"一刀切極端"的編程要求.我覺得對(duì)象思想的最大好處在于封裝,能把相關(guān)的函數(shù)封裝起來提供給其他人調(diào)用,有命名沖突改個(gè)類名就行.如果不用類,有命名沖突的時(shí)候就需要修改多個(gè)函數(shù)的前綴了.所以說把類當(dāng)命名空間用,也沒什么不妥.
我們就看PHP自身,PHP提供的功能有基于函數(shù)和類的兩種封裝,基于函數(shù)的封裝有常用的字符串操作函數(shù)和數(shù)組操作函數(shù)等,基于類的封裝則有SPL庫等,你會(huì)說面向?qū)ο缶鸵欢ū冗^程式先進(jìn)和方便么?我看不見得.如果真的那么熱衷面向?qū)ο?難道不應(yīng)該是去學(xué)所有庫都基于類封裝"完全面向?qū)ο?的Java么?
Java大神王垠看待面向?qū)ο缶幊?
“對(duì)象思想”作為數(shù)據(jù)訪問的方式,是有一定好處的。 然而“面向?qū)ο蟆保ǘ嗔恕懊嫦颉眱蓚€(gè)字),就是把這種本來良好的思想東拉西扯,牽強(qiáng)附會(huì),發(fā)揮過了頭。 很多面向?qū)ο笳Z言號(hào)稱“所有東西都是對(duì)象”,把所有函數(shù)都放進(jìn)所謂對(duì)象里面,叫做“方法”,把普通的函數(shù)叫做“靜態(tài)方法”。 實(shí)際上只有極少需要抽象的時(shí)候,需要使用內(nèi)嵌于對(duì)象之內(nèi),跟數(shù)據(jù)緊密結(jié)合的“方法”。 其他的時(shí)候,你其實(shí)只是想表達(dá)數(shù)據(jù)之間的變換操作,這些完全可以用普通的函數(shù)表達(dá),而且這樣做更加簡單和直接。 把所有函數(shù)放進(jìn)對(duì)象的做法是本末倒置的,因?yàn)楹瘮?shù)本身并不屬于對(duì)象,它們只是對(duì)象上面的變換操作。 絕大部分函數(shù)是獨(dú)立于對(duì)象的,它們不能被叫做“方法”。 強(qiáng)制把所有函數(shù)放進(jìn)它們本來不屬于的對(duì)象里面,把它們?nèi)甲鳛椤胺椒ā保瑢?dǎo)致了面向?qū)ο蟠a邏輯過度復(fù)雜。 很簡單的想法,非得繞好多道彎子才能表達(dá)清楚。?很多人至今不知道自己所用的“面向?qū)ο笳Z言”里面的很多優(yōu)點(diǎn),都是從過程式語言繼承來的。?大多數(shù)的面向?qū)ο笳Z言里都缺乏正確的實(shí)現(xiàn)一等函數(shù)的機(jī)制。 Java語言是一個(gè)極致,它完全不允許將函數(shù)當(dāng)作數(shù)據(jù)來傳遞。 你需要將全部的函數(shù)都封裝進(jìn)類,然后稱它們?yōu)椤胺椒ā保拖裎艺f的,這是綁架。 缺乏一等函數(shù)是為什么Java里需要這么多“設(shè)計(jì)模式”的主要原因。 一旦有了一等函數(shù),你將不再需要大部分的這些設(shè)計(jì)模式。