第13章 PHP的面向?qū)ο缶幊?ppt_第1頁
第13章 PHP的面向?qū)ο缶幊?ppt_第2頁
第13章 PHP的面向?qū)ο缶幊?ppt_第3頁
第13章 PHP的面向?qū)ο缶幊?ppt_第4頁
第13章 PHP的面向?qū)ο缶幊?ppt_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第13章 PHP的面向?qū)ο缶幊?面向?qū)ο缶幊蹋∣OP)是程序員編程的一項基本技能,PHP5對OOP提供了良好的支持。如何使用OOP的思想進(jìn)行PHP的高級編程,對于提高PHP編程能力和規(guī)劃好Web開發(fā)構(gòu)架來說都是非常有意義的。 通常在做一個有數(shù)據(jù)庫后臺的網(wǎng)站的時候,都會考慮到程序需要適用于不同的應(yīng)用環(huán)境。和其他編程語言不同的是,在PHP中,操作數(shù)據(jù)庫的是一系列的具體功能函數(shù)(如果不使用ODBC接口的話)。這樣做雖然效率很高,但是封裝卻不夠。如果有一個統(tǒng)一的數(shù)據(jù)庫接口,那么就可以不對程序做任何修改而適用于多種數(shù)據(jù)庫,從而使程序的移植性和跨平臺能力都大大提高。,13.1 PHP中的類應(yīng)用,許多PHP

2、的愛好者在學(xué)習(xí)過程中感到對PHP中類的概念較難理解和掌握,雖然知道類既然存在就有其存在的道理,但是由于平時接觸和使用的機會較少,也就一略而過。其實,只要讀者理解變量和函數(shù)這些PHP基本概念的話,掌握類的含義就不成問題。 所謂類就是指由變量和作用于變量的函數(shù)組成的集合。類提供了一種對現(xiàn)實世界中事物的描述方式。通過有效的使用類,讀者可以將描述同一對象的多個變量和函數(shù)組合在一起,作為一個整體使用,從而使編寫出來的程序更直觀,更合理,更易于維護。,13.1.1 深入PHP中的類,當(dāng)定義一個類時,實際上是聲明了它確切形式和屬性,這是通過指定類所包含的數(shù)量和對數(shù)據(jù)進(jìn)行的操作的代碼來實現(xiàn)的。也許有一些簡單的

3、類僅包含代碼或數(shù)據(jù),但是,現(xiàn)實世界中的類都包含兩者。類的聲明是通過關(guān)鍵詞“class”來聲明的,其一般形式為: class classname 函數(shù)語句; 在PHP中面向?qū)?象編程是通過類來完成封裝的。下面通過一個實例來介紹一下類是如何來定義的,實例程序如代碼13-1所示。,13.1.2 類的繼承,可以像上一小節(jié)的演示$obj-x=6那樣,通過類引用方式來存取數(shù)據(jù)成員,這不是一個很好的OOP習(xí)慣。所以強烈建議通過方法來存取成員變量。如果把成員變量看成是不可處理的,并且只通過對象句柄來使用方法,那么你將是一個好的OOP程序員。不幸的是,PHP不支持聲明私有成員變量,所以不良代碼在PHP中也是允許

4、的。繼承在PHP中很容易實現(xiàn),只要使用extend關(guān)鍵字即可,實例代碼如代碼13-2所示。,13.1.3 類的構(gòu)造函數(shù),讀者可以在自己的類中定義構(gòu)造函數(shù)。構(gòu)造函數(shù)是一個與類名同名的方法,當(dāng)讀者創(chuàng)建一個類的對象時會被調(diào)用,例如代碼13-3所示。,13.1.4 抽象類和重載,OOP的一個很好的機制是使用抽象類。抽象類是不能實例化,只能提供給派生類一個接口。設(shè)計者通常使用抽象類來強迫程序員從基類派生,這樣可以確保新的類包含一些期待的功能。在PHP中沒有標(biāo)準(zhǔn)的方法,但是如果讀者需要這個特性,可以通過定義基類,并在它的構(gòu)造函數(shù)后加上“die” 的調(diào)用,這樣就可以保證基類是不可實例化的,現(xiàn)在在每一個方法接

5、口后面加上“die”語句。所以,如果一個程序員在派生類中沒有覆蓋方法,將引發(fā)一個錯誤。而且因為PHP 是無類型的,讀者可能需要確認(rèn)一個對象是來自于自己的基類的派生類,那么在基類中增加一個方法來實義類的身份,也就是返回某種標(biāo)識“id”,并且在讀者接收到一個對象參數(shù)時校驗這個值。當(dāng)然,如果一個邪惡不好的程序員在派生類中覆蓋了這個方法,這種方法就不起作用了,不過一般問題多發(fā)現(xiàn)在懶惰的程序員身上。 當(dāng)然,能夠讓基類對程序員無法看到是很好的,只要將接口打印出來做程序的工作就可以了。注意在PHP中沒有析構(gòu)函數(shù)。 重載與覆蓋不同,重載在PHP中不支持。在OOP中,讀者可以重載一個方法來實現(xiàn)兩個或重多的方法具

6、有相同的名字,但是有不同數(shù)量或類型的參數(shù)。PHP 是一種松散類型的語言,所以通過類型重載不起作用,然而通過參數(shù)的個數(shù)不同來重載也不起作用。,13.1.5 面向?qū)ο蟮亩鄳B(tài),多態(tài)是對象的一種能力,它可以在運行時刻根據(jù)傳遞的對象參數(shù),決定調(diào)用哪一個對象的方法。例如,如果讀者有一個figure的類,它定義了一個draw的方法。并且派生了circle和rectangle 類,在派生類中讀者覆蓋了draw方法,讀者可能還有一個函數(shù),它希望使用一個參數(shù)x,并且可以調(diào)用$x-draw() 。如果讀者有多態(tài)性,調(diào)用哪個draw方法就依賴于讀者傳遞給這個函數(shù)的對象類型。 多態(tài)性在像PHP這樣的解釋語言中是非常容易

7、和自然的,所以PHP當(dāng)然支持多態(tài)性,代碼如13-6所示。,13.1.6 一個典型的數(shù)據(jù)庫操作類,初學(xué)者甚至一些非初學(xué)者常常犯的錯誤,就是在開發(fā)應(yīng)用程序的時候,缺乏對未來的考慮。如果有一天,讀者的程序需要使用其他的數(shù)據(jù)庫,難道讀者還需要重新寫一篇針對于這個版本數(shù)據(jù)庫的程序嗎?這是程序常常會遇到的問題,尤其是當(dāng)目前的數(shù)據(jù)庫可能不適合讀者當(dāng)前的需要的時候。 但是當(dāng)讀者做這一切的時候會發(fā)現(xiàn)絕非是想像的那樣容易,每一個 DBMS 有不同的函數(shù)。舉例來說:在MySQL中連接數(shù)據(jù)庫的函數(shù)為 mysql_connect(),而在MSSQL卻是 mssql_connect()。重新查看讀者所有的代碼,然后修改所

8、有操作數(shù)據(jù)庫的函數(shù)和查詢語法,這絕不是一項簡單的工作。程序會經(jīng)常的被捆綁到了錯誤的數(shù)據(jù)庫上,以至無法在運行時達(dá)到最優(yōu)性能。數(shù)據(jù)庫類庫就是這樣產(chǎn)生的。它允許讀者通過同樣的代碼來操作不同的數(shù)據(jù)庫。一個設(shè)計良好的數(shù)據(jù)庫類庫可以完美地改變這一切。它允許讀者通過極小的修改,就能轉(zhuǎn)接到其他數(shù)據(jù)庫:無論讀者要連接什么數(shù)據(jù)庫管理系統(tǒng),只要使用同一個的函數(shù),和不同的參數(shù)。舉例來說, 在 ADOdb 中,只需簡單地將 $db = NewADOConnection(access ) 修改為$db = NewADOConnection(mysql),這樣,讀者就輕松地把程序從 Access 數(shù)據(jù)庫轉(zhuǎn)移到了 MySQL

9、數(shù)據(jù)庫中?,F(xiàn)在網(wǎng)絡(luò)上已經(jīng)有很多這樣的數(shù)據(jù)庫類庫,比如Pear,PHPlib,筆者已經(jīng)在工作中使用到這些,也許讀者也曾經(jīng)用過。但這里僅將重點放在讀者所特別關(guān)注的 ADOdb,只是要地對它做一個介紹,使讀者能夠馬上運用它來開發(fā)自己的下一個項目。,13.1.7 用文件上傳類輕松實現(xiàn)PHP文件上傳,文件上傳是Web開發(fā)中的一個重要內(nèi)容。PHP可以支持多種瀏覽器上傳文件。這樣可以給用戶代來極大的方便。從而也提高了網(wǎng)站的整體性能。使用PHP上傳類可以大大提高程序的工作效率,也減少了程序員的工作量。因為當(dāng)讀者需要修改程序時,不需要每個頁面都去修改,只需要修改PHP文件上傳類就可以了,所以減少了程序員的工作量

10、。,13.2 PHP模板的應(yīng)用,在多人開發(fā)大型PHP項目時,模板技術(shù)非常有用,它可以分開美工和程序員的工作,并且方便界面的修改和完善;不僅如此,利用模板技術(shù),還可以簡單有效地定制或者修改站點?,F(xiàn)在筆者將要講述如何在PHP中應(yīng)用模板技術(shù)。 PHP的模板技術(shù)又分為:PHPLIB Template模板引擎、FastTemplate模板引擎、SMARTY模板引擎。,13.2.1 什么是模板技術(shù),什么是PHP的模板技術(shù)?PHP模板發(fā)展自Perl的Template。剝開神秘的面紗,模板技術(shù)的核心概念是非常簡單的。要將讀者的美工頁面指定為模板文件,只需將頁面中活動的內(nèi)容如數(shù)據(jù)庫輸出、用戶交互等部分定義為變量

11、放在模板文件中相應(yīng)的位置,當(dāng)用戶瀏覽時,由PHP程序文件打開該模板文件,將模板文件中定義的變量進(jìn)行替換,當(dāng)然,替換成對應(yīng)的數(shù)據(jù)庫輸出或者用戶交互等動態(tài)生成內(nèi)容。 模板能夠改善網(wǎng)站的結(jié)構(gòu),其特點有: 可以在幾秒鐘改變整個站點的外觀。 抽象程序設(shè)計,沒有垃圾HTML代碼。 設(shè)計人員不需要關(guān)心全部的“模糊”代碼。 速度快。 現(xiàn)在PHP中應(yīng)用最多的模板有三種,SMARTY、Phplibtemplate和Fasttemplate,這三種模板作者雖然不同,但是在語法結(jié)構(gòu)和函數(shù)定義上卻有著驚人的相似之處。只要讀者掌握了其中的一個,另一個相信讀者也會很快的熟練運用。本章總括了使用模板的優(yōu)點和優(yōu)勢,又分別介紹了

12、SMARTY、Phplibtemplate和Fasttemplate的使用方法和技巧,最后又對這兩種模板的效率進(jìn)行了對比。希望通過本章的介紹,能幫助那些想了解模板技術(shù)的讀者用最快的速度去掌握它,并在以后的編程中去應(yīng)用這項偉大的技術(shù)。,13.2.2 PHPLIB Template模板引擎介紹和使用實例,如果讀者正在設(shè)計一個交互式網(wǎng)站,一定會關(guān)注兩個主要的問題,就是美工和程序。這也是一個網(wǎng)站在建設(shè)中拋開其內(nèi)容之后最關(guān)鍵的要素。通常有兩種方式來協(xié)調(diào)美工和程序之間的關(guān)系: 先做好美工頁面,然后由程序員直接在美工頁面的HTML文件中嵌入ASP、JSP、PHP等程序代碼。當(dāng)然本書主要是介紹嵌入PHP程序代

13、碼。 美工和程序同時進(jìn)行,但這時因為沒有頁面框架,程序只能做出一些關(guān)鍵代碼,雙方完成后再進(jìn)行一次美工頁面和程序代碼的嵌入合成。 在實際的網(wǎng)站建設(shè)過程中,由于人員、進(jìn)度等環(huán)境的限制,大家通常會混合地使用上面兩種協(xié)調(diào)方式。然而這兩種方法都有不足之處,如下所示。 效率不高。兩者協(xié)調(diào)不好可能產(chǎn)生等待、重復(fù)代碼調(diào)試步驟等現(xiàn)象。 調(diào)試不暢。由于程序代碼最終需要嵌入在HTML頁面中,代碼的嵌入、調(diào)試、糾錯都比較煩瑣。 維護不便。一旦美工設(shè)計需要修改,如網(wǎng)站改版,那么所有程序和HTML代碼混合頁面都需要重寫。,13.2.3 FastTemplate模板引擎介紹和使用實例,當(dāng)讀者在建立一個站點的時候,可能不得不

14、面對以下現(xiàn)實,站點需要一名程序員來設(shè)計程序和一名網(wǎng)站設(shè)計者來組織頁面。那么,是否有使兩者很好的結(jié)合起來的方法呢?有的,就是使用模板FastTemplate技術(shù),這將會使你的工作更加輕松。下面解釋一下使用模板的好處: 在很短的時間內(nèi)可以替換整個站點的外觀。 使程序員可以抽象編程,而無須接觸HTML代碼。 速度非常之快。 可以重復(fù)利用以前的模板。,13.2.4 SMARTY模板引擎介紹和使用實例,smarty是一個使用PHP寫出來的模板PHP模板引擎,它提供了邏輯與外在內(nèi)容的分離,簡單地講,目的就是要使PHP程序員同美工分離,使程序員改變程序的邏輯內(nèi)容不會影響到美工的頁面設(shè)計,美工重新修改頁面不會

15、影響到程序的程序邏輯,這在多人合作的項目中顯的尤為重要,smarty的優(yōu)點有以下幾方面。 速度:采用smarty編寫的程序可以獲得最大速度的提高,這一點是相對于其他的模板引擎技術(shù)而言的。 編譯型:采用smarty編寫的程序在運行時要編譯成一個非模板技術(shù)的PHP文件,這個文件采用了PHP與HTML混合的方式,在下一次訪問模板時將WEB請求直接轉(zhuǎn)換到這個文件中,而不再進(jìn)行模板重新編譯。在源程序沒有改動的情況下。 緩存技術(shù):smarty選用的一種緩存技術(shù),它可以將用戶最終看到的HTML文件緩存成一個靜態(tài)的HTML頁,當(dāng)設(shè)定smarty的cache屬性為true時,在smarty設(shè)定的cachetime期內(nèi)將用戶的WEB請求直接轉(zhuǎn)換到這個靜態(tài)的HTML文件中來,這相當(dāng)于調(diào)用一個靜態(tài)的HTML文件。 插件技術(shù):smarty可以自定義插件。插件實際就是一些自定義的函數(shù)。 模板中可以使用ifelse等條件判斷語句。在模板文件使用判斷語句可以非常方便地對模板進(jìn)行格式重排。 上面介紹的是smarty的優(yōu)點,下面介紹不適合使用smarty的地方。 需要實時更新的內(nèi)容。例如像股票顯示,它需要經(jīng)常對數(shù)據(jù)進(jìn)行更新,這類型的程序使用smarty會使模板處理速度變慢。 小項目:小項目因為項目簡單而美工與程序員兼于一人的項目,使用sma

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論