好久沒(méi)發(fā)技術(shù)性文章了,今天在21PHP里看到有位兄弟發(fā)了這貼子,轉(zhuǎn)了過(guò)來(lái).對(duì)加強(qiáng)OOP的學(xué)習(xí)有些用
----------------------------------------------------------
避免OOP的形式,POP的思想
隨著PHP對(duì)OOP(面向?qū)ο缶幊?支持的增強(qiáng)以及程序設(shè)計(jì)思想的發(fā)展,越來(lái)越多的PHP程序員走進(jìn)了OOP的世界.通過(guò)簡(jiǎn)單的學(xué)習(xí),大多數(shù)程序員都能
快速的掌握OOP編程的基本技能.程序員們所寫的代碼里class,new等字符串也越來(lái)越多.但是作為程序員的你,是否陷入了一種OO形式,PO思想的
編程陷阱呢?
作為POP時(shí)代的程序員,為了實(shí)現(xiàn)計(jì)算一件房子的所有門的價(jià)格,他們會(huì)寫這樣一個(gè)函數(shù).
代碼:
/******************************************
函數(shù):priceOfHouseDoor($num,$price)
功能:計(jì)算所有的門的價(jià)格總和
參數(shù):$num門的數(shù)量,$price每扇門的價(jià)格
備注:surfchen@http://www.yubeinet.com/
******************************************/
functionpriceHouseDoor($num,$price)
{
return$num*$price;
}
echopriceHouseDoor(2,5);//輸出價(jià)格
或者干脆來(lái)個(gè)更過(guò)程的:
代碼:
$doors=2;//門數(shù)量
$price=5;//每扇門的價(jià)格
echo$doors*$price;//輸出價(jià)格
這是典型的POP.當(dāng)了解了OOP后,很多人可能會(huì)改變實(shí)現(xiàn)這個(gè)功能的代碼.或許,程序員們會(huì)這么寫:
代碼:
classhouse
{
/******************************************
函數(shù):getDoorPrice($num,$price)
功能:計(jì)算所有的門的價(jià)格總和
參數(shù):$num門的數(shù)量,$price每扇門的價(jià)格
備注:surfchen@http://www.yubeinet.com/
******************************************/
functiongetDoorPrice($num,$price)
{
return$num*$price;
}
}
$house=newhouse;
echo$house->getDoorPrice(2,5);//輸出價(jià)格
我們一下子就看出來(lái),這段代碼用到了OOP的代表--類和實(shí)例化.那么,這就是面向?qū)ο缶幊塘藛?
我再仔細(xì)一看,發(fā)現(xiàn)這個(gè)類其實(shí)只不過(guò)是上面的priceOfHouseDoor($num,$price)函數(shù)的面向?qū)ο笮问?
嗯,現(xiàn)在我們先探討一下到底什么才叫面向?qū)ο缶幊?我的理解是:面向?qū)ο缶幊逃袃蓚€(gè)核心內(nèi)容.一是類,二是實(shí)例.類是對(duì)一類事物的抽象,而實(shí)
例是這一類事物中的個(gè)體.而實(shí)例的屬性(值)和方法(函數(shù)),則分別是這個(gè)個(gè)體的具體內(nèi)容和動(dòng)作.
我們?cè)賮?lái)看看上面的這個(gè)house類.它有一個(gè)方法,getDoorPrice($num,$price),引入了兩個(gè)參數(shù).一個(gè)是房子的門的數(shù)量,一個(gè)是房子門價(jià).我們
發(fā)現(xiàn),當(dāng)我們使用這個(gè)方法時(shí),這兩個(gè)值是臨時(shí)構(gòu)建的,并沒(méi)有與房子形成任何的聯(lián)系.在實(shí)際生活中,一個(gè)房子里的門與房子無(wú)任何聯(lián)系,這是不
可以理解的...正如我們所知道的,OOP其實(shí)是我們真實(shí)世界的一個(gè)縮影.所以,OOP中的房子和房子的門無(wú)任何聯(lián)系,也是不可理解的,是非OO的思
維.
那么,我們應(yīng)該如何使用真正的OO來(lái)實(shí)現(xiàn)以上功能呢?請(qǐng)看以下代碼:
代碼:
classhouse
{
var$doors;//門的數(shù)量
var$pricePerDoors;//每扇門的價(jià)格
functionsetNumOfDoors($num){$this->doors=$num;}//設(shè)定門數(shù)量
functionsetPricePerDoor($price){$this->pricePerDoors=$price;}//設(shè)定每扇門的價(jià)格
/*************\
*獲得門的價(jià)格*
\*************/
functiongetDoorPrice()
{
return($this->doors)*($this->pricePerDoors);
}
}
$house=newhouse;
$house->setNumOfDoors(2);//設(shè)定門數(shù)量
$house->setPricePerDoor(5);//設(shè)定每扇門的價(jià)格
echo$house->getDoorPrice();//輸出
我們很明顯地看到,以上代碼的門的數(shù)量和價(jià)格房子已經(jīng)結(jié)合在了一起.這才是真正的面向?qū)ο?
你不覺(jué)得嗎?^_^
轉(zhuǎn)載:http://www.mscto.com/PHP/2009022886968.html