PHP開發(fā)大型項(xiàng)目的方法:OOP思想(2)_PHP教程
推薦:動(dòng)態(tài)網(wǎng)頁制作PHP常用的正則表達(dá)式匹配中文字符的正則表達(dá)式: [u4e00-u9fa5] 匹配雙字節(jié)字符(包括漢字在內(nèi)): [^
代碼:
<?php function Another() { $this->y=5; $this->Something(); //顯示調(diào)用基類構(gòu)造函數(shù) } ?> |
OOP的一個(gè)很好的機(jī)制是使用抽象類。抽象類是不能實(shí)例化,只能提供給派生類一個(gè)接口。設(shè)計(jì)者通常使用抽象類來強(qiáng)迫程序員從基類派生,這樣可以確保新的類包含一些期待的功能。在PHP中沒有標(biāo)準(zhǔn)的方法,但是:
如果你需要這個(gè)特性,可以通過定義基類,并在它的構(gòu)造函數(shù)后加上"die" 的調(diào)用,這樣就可以保證基類是不可實(shí)例化的,現(xiàn)在在每一個(gè)方法(接口)后面加上"die" 語句,所以,如果一個(gè)程序員在派生類中沒有覆蓋方法,將引發(fā)一個(gè)錯(cuò)誤。而且因?yàn)镻HP 是無類型的,你可能需要確認(rèn)一個(gè)對(duì)象是來自于你的基類的派生類,那么在基類中增加一個(gè)方法來實(shí)義類的身份(返回某種標(biāo)識(shí)id),并且在你接收到一個(gè)對(duì)象參數(shù)時(shí)校驗(yàn)這個(gè)值。當(dāng)然,如果一個(gè)邪惡不好的程序員在派生類中覆蓋了這個(gè)方法,這種方法就不起作用了,不過一般問題多發(fā)現(xiàn)在懶惰的程序員身上,而不是邪惡的程序員。
當(dāng)然,能夠讓基類對(duì)程序員無法看到是很好的,只要將接口打印出來做他們的工作就可以了。
在PHP中沒有析構(gòu)函數(shù)。
重載(與覆蓋不同)在PHP中不支持。在OOP中,你可以重載一個(gè)方法來實(shí)現(xiàn)兩個(gè)或重多的方法具有相同的名字,但是有不同數(shù)量或類型的參數(shù)(這要看語言)。PHP 是一種松散類型的語言,所以通過類型重載不起作用,然而通過參數(shù)的個(gè)數(shù)不同來重載也不起作用。
有時(shí)在OOP中重載構(gòu)造函數(shù)非常好,這樣你可以通過不同的方法創(chuàng)建對(duì)象(傳遞不同數(shù)量的參數(shù))。在PHP中實(shí)現(xiàn)它的技巧是:
代碼:
<?php class Myclass { function Myclass() { $name="Myclass".func_num_args(); $this->$name(); //注意$this->name()一般是錯(cuò)誤的,但是在這里$name是一個(gè)將被調(diào)用方法的名字 } function Myclass1($x) { code; } function Myclass2($x,$y) { code; } } ?> |
通過在類中的額外的處理,使用這個(gè)類對(duì)用戶是透明的:
$obj1=new Myclass(´1´); //將調(diào)用Myclass1 |
有時(shí)這個(gè)非常好用。
多態(tài)
多態(tài)是對(duì)象的一種能力,它可以在運(yùn)行時(shí)刻根據(jù)傳遞的對(duì)象參數(shù),決定調(diào)用哪一個(gè)對(duì)象的方法。例如,如果你有一個(gè)figure的類,它定義了一個(gè)draw的方法。并且派生了circle和rectangle 類,在派生類中你覆蓋了draw方法,你可能還有一個(gè)函數(shù),它希望使用一個(gè)參數(shù)x,并且可以調(diào)用$x->draw() 。如果你有多態(tài)性,調(diào)用哪個(gè)draw方法就依賴于你傳遞給這個(gè)函數(shù)的對(duì)象類型。
多態(tài)性在象PHP這樣的解釋語言(想象一下一個(gè)C 編譯器生成這樣的代碼,你應(yīng)該調(diào)用哪一個(gè)方法?你也不知道你擁有的對(duì)象是什么類型的,好,這不是重點(diǎn))是非常容易和自然的。所以PHP當(dāng)然支持多態(tài)性。
代碼:
<?php function niceDrawing($x) { //假設(shè)這是Board類的一個(gè)方法 $x->draw(); } $obj=new Circle(3,187); $obj2=new Rectangle(4,5); $board->niceDrawing($obj); //將調(diào)用Circle的draw方法 $board->niceDrawing($obj2); //將調(diào)用Rectangle的draw方法 ?> |
用PHP進(jìn)行面向?qū)ο缶幊?/strong>
一些"純化論者(purists)"可能會(huì)說PHP不是一個(gè)真正的面向?qū)ο蟮恼Z言,這是事實(shí)。PHP 是一個(gè)混合型語言,你可以使用OOP,也可以使用傳統(tǒng)的過程化編程。然而,對(duì)于大型項(xiàng)目,你可能想/需要在PHP 中使用純的OOP去聲明類,而且在你的項(xiàng)目只用對(duì)象和類。
隨著項(xiàng)目越來越大,使用OOP可能會(huì)有幫助,OOP代碼很容易維護(hù),容易理解和重用。這些就是軟件工程的基礎(chǔ)。在基于web的項(xiàng)目中應(yīng)用這些概念就成為將來網(wǎng)站成功的關(guān)鍵。
分享:實(shí)現(xiàn)dedecms圖集單擊圖片翻頁的功能題記:在很多相冊(cè)的網(wǎng)站中,都有這樣的功能:當(dāng)圖片分多頁顯示的情況下,點(diǎn)擊圖片會(huì)自動(dòng)翻頁到下一張圖片,接下來我們?cè)赿edecms4中實(shí)現(xiàn)這個(gè)功能。以下是實(shí)現(xiàn)方法: 1、為了實(shí)現(xiàn)這個(gè)功能,我們
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- PHP實(shí)例:用PHP實(shí)現(xiàn)表單驗(yàn)證碼登陸校驗(yàn)
- PHP安全之Register Globals
- 如何用PHP和mysql創(chuàng)建一個(gè)ShoutBox
- 如何使PHP文件與HTML代碼更好的分離
- php插入中文到sql server 2008里出現(xiàn)亂碼的解決辦法
- 實(shí)例:用PHP技術(shù)解決網(wǎng)站URL格式過長(zhǎng)的問題
- PHP的語言層面的優(yōu)化以及代碼優(yōu)化技巧
- PHP技術(shù)進(jìn)階 用PHP處理多個(gè)同名復(fù)選框
- str_replace只替換一次字符串的方法
- php內(nèi)存不夠用的解決方法
- 相關(guān)鏈接:
- 教程說明:
PHP教程-PHP開發(fā)大型項(xiàng)目的方法:OOP思想(2)
。