版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、考察的特性本文主要考察 php v5.3 的以下特性: 延遲靜態(tài)綁定 名稱(chēng)空間 類(lèi)方法重載 變量解析和 heredoc 但是,在繼續(xù)之前,需要設(shè)置 php v5.3。設(shè)置php 廣為人知的一個(gè)特點(diǎn)就是設(shè)置起來(lái)有點(diǎn)麻煩。這也許是因?yàn)?php 是安裝在 web 服務(wù)器(例如 apache)上的,而且常常需要連接到外部數(shù)據(jù)庫(kù)(例如 mysql)。而且,某種意義上,php 腳本是嵌入在 html 代碼中的。換句話說(shuō),php 這種技術(shù)橫跨多個(gè)復(fù)雜的領(lǐng)域。所以,在編寫(xiě) php 腳本代碼之前,必須越過(guò)很多的障礙。我希望可以改善這一現(xiàn)狀,但是與軟件技術(shù)有關(guān)的很多事情仍然很困難。不過(guò),對(duì)于那些使用 apple
2、macs 的幸運(yùn)讀者來(lái)說(shuō),設(shè)置過(guò)程再簡(jiǎn)單不過(guò)了:1. 獲得 php 二進(jìn)制安裝文件(http:/www.entropy.ch/software/macosx/php/)。 2. 在 system preferences 中關(guān)閉 web sharing。 3. 找到 /etc/apache2/httpd.conf 文件。 4. 在 httpd.conf 文件中注釋掉下面這行:loadmodule php5_module。 5. 運(yùn)行 php v5.3 安裝文件(如果您愿意,也可以構(gòu)建源代碼)。 6. 在 system preferences 中打開(kāi) web sharing。 本文的目的不是僅僅介
3、紹如何安裝,所以如果您的平臺(tái)是 microsoft windows 或 linux,請(qǐng)參閱一些很棒的 php 參考書(shū)籍(見(jiàn)我在 參考資料 中推薦的書(shū)籍)。為了檢查 php 是否已安裝以及版本是否合適,在 /library/webserver/documents 文件夾中創(chuàng)建一個(gè)名為 phpinfo1.php 的文件。清單 1 展示了這個(gè)腳本文件的內(nèi)容。本文中的所有腳本都在 下載 小節(jié)提供的壓縮(zip)文件中,所以實(shí)際上不需要?jiǎng)?chuàng)建任何文件。清單 1. phpinfo1.php將該腳本文件放在 /library/webserver/documents 文件夾中之后,訪問(wèn) http:/localh
4、ost/phpinfo1.php。應(yīng)該可以看到類(lèi)似圖 1 的界面。這里可能需要用您主機(jī)的 ip 地址替換 url 中的 “l(fā)ocalhost”。圖 1. php v5.3.0 安裝成功延遲靜態(tài)綁定php v5.3 擴(kuò)展了 static 關(guān)鍵詞的使用。現(xiàn)在,無(wú)需實(shí)例化類(lèi)便可訪問(wèn)靜態(tài)類(lèi)方法和屬性。當(dāng)類(lèi)不存在對(duì)象,或者不需要對(duì)象時(shí),這個(gè)特性就比較方便。清單 2 展示了延遲靜態(tài)綁定的一個(gè)例子。清單 2. 延遲靜態(tài)綁定清單 2 中的代碼產(chǎn)生以下輸出:calling who method from class b 在 php v5.3.0 之前,類(lèi) a 中的方法可能被定義為 self:who()。不幸的是
5、,這將導(dǎo)致調(diào)用類(lèi) a 中的函數(shù),而不是子類(lèi) b 中的函數(shù)。php v5.3.0 用 static: 關(guān)鍵詞修復(fù)了這個(gè)問(wèn)題,允許在運(yùn)行時(shí)才引用之前調(diào)用的類(lèi)方法。顯然這就是清單 2 中代碼的目的。增強(qiáng)面向?qū)ο笕魏文茉鰪?qiáng) php 面向?qū)ο蠓矫娴母淖兌际鞘芄膭?lì)的,因?yàn)檫@將導(dǎo)致更可靠的設(shè)計(jì)和更易于維護(hù)的代碼。對(duì)于清單 2 中的代碼我有些許微詞,基類(lèi)(a)和派生類(lèi)(b)中的 who() 方法是重復(fù)的。如果類(lèi) b 中不必復(fù)制該代碼就好了,但是似乎 php v5.3.0 中的 _class_ 語(yǔ)法要求必須這么做。也就是說(shuō),_class_ 不支持延遲綁定。清單 2 中使用 _class_ 也許有點(diǎn)勉強(qiáng),但確實(shí)可
6、以說(shuō)明 php v5.3.0 有一個(gè)小小的問(wèn)題。顯然,對(duì)于清單 2 中的例子,這不是多大的問(wèn)題,但是對(duì)于有數(shù)千行 php 代碼的網(wǎng)站來(lái)說(shuō),就沒(méi)那么簡(jiǎn)單了。重復(fù)代碼通常意味著重復(fù)勞動(dòng)。名稱(chēng)空間php v5.3 提供名稱(chēng)空間功能,以增強(qiáng)該語(yǔ)言的封裝能力。名稱(chēng)空間在現(xiàn)代語(yǔ)言中非常常見(jiàn),例如 c# 和 xml。名稱(chēng)空間的主要優(yōu)點(diǎn)是,通過(guò)它可以為代碼符號(hào)(類(lèi)、函數(shù)和常量)定義獨(dú)立的容器,這聽(tīng)起來(lái)有點(diǎn)復(fù)雜,其實(shí)不然。清單 3 顯示了使用 php 名稱(chēng)空間定義本地和全局字符串常量的一個(gè)例子。清單 3. php 名稱(chēng)空間?php namespace test; define(astring, hello wo
7、rld!); define(testastring, hello world from my namespace!); echo my string is: ; echo astring; echo ; echo my string is ; echo astring; echo ; ? 清單 3 中的代碼產(chǎn)生以下輸出:my string is: hello world from my namespace! my string is: hello world!那么,代碼中發(fā)生了什么?第一個(gè) define 語(yǔ)句在名稱(chēng)空間 test 中創(chuàng)建一個(gè)字符串常量 astring。然后,當(dāng)引用 astrin
8、g 字符串時(shí),引擎首先查看本地 test 名稱(chēng)空間。這就是為什么看到本地定義的字符串首先顯示。然后,要看到全局定義的字符串,只需使用語(yǔ)法 astring。有了這些簡(jiǎn)單的規(guī)則,便可以使用任意數(shù)量的名稱(chēng)空間,而不必?fù)?dān)心名稱(chēng)沖突。有了名稱(chēng)空間功能,和之前相比,代碼之間的界限更加清晰。而這一點(diǎn)又有助于團(tuán)隊(duì)環(huán)境中的代碼整合。換句話說(shuō),不同的團(tuán)隊(duì)可以分配他們自己的名稱(chēng)空間,當(dāng)所有團(tuán)隊(duì)成員都遵循這個(gè)慣例時(shí),名稱(chēng)沖突的情況應(yīng)該會(huì)降為零。這也是 5.3.0 版對(duì) php 語(yǔ)言在面向?qū)ο蠓矫娴囊粋€(gè)增強(qiáng)。類(lèi)方法重載在 php 中,術(shù)語(yǔ)重載(overloading) 與通常的面向?qū)ο笊舷挛纳杂胁煌?。?java 語(yǔ)言
9、或 c# 中,“重載” 方法是指為不同參數(shù)列表提供相同代碼的方法。例如,如果有一個(gè)名為 draw(string str) 的方法,那么重載的方法可以有以下形式:draw(string str, int i)。這種方法符號(hào)名稱(chēng)被稱(chēng)作方法簽名,為了便于重載,返回類(lèi)型被省略。在 php 中,“重載” 是指動(dòng)態(tài)創(chuàng)建的方法和屬性。這實(shí)際上是動(dòng)態(tài)代碼,任何這樣的動(dòng)態(tài)實(shí)體都是由所謂的魔術(shù)方法(magic methods) 來(lái)處理??梢栽谝粋€(gè)類(lèi)中為各種不同的動(dòng)作創(chuàng)建這些魔術(shù)方法。然后,當(dāng)代碼中遇到未聲明或不可見(jiàn)的屬性或方法時(shí),便可以調(diào)用重載方法。這樣風(fēng)格的重載提供了很大程度上的靈活性。聽(tīng)起來(lái)有些復(fù)雜,所以來(lái)看
10、看一個(gè)具體的例子。清單 4 展示如何使用 php 重載調(diào)用對(duì)象和類(lèi)方法。清單 4. php 重載runoverloadedtest(in an object context); overloadedmethodtest:runoverloadedtest(in a static context); / as of php 5.3.0 ? 清單 4 中的代碼產(chǎn)生以下輸出:calling object method runoverloadedtest in an object context calling static method runoverloadedtest in a static c
11、ontext在清單 4 中,注意重載的代碼是如何根據(jù)調(diào)用代碼來(lái)推斷方法名和參數(shù)的:$obj-runoverloadedtest(in an object context); overloadedmethodtest:runoverloadedtest(in a static context); / as of php 5.3.0 要使用這種能力,程序員需要承擔(dān)較大的責(zé)任。雖然重載為編寫(xiě)靈活的代碼提供了便利,但同時(shí)也為錯(cuò)誤提供了土壤。所以,使用重載時(shí)應(yīng)該謹(jǐn)慎,并且要有嚴(yán)格的代碼測(cè)試紀(jì)律。變量解析和 heredocphp 的優(yōu)勢(shì)之一在于字符串解析。php 對(duì)于字符串的長(zhǎng)度沒(méi)有限制,只要主機(jī)的可用內(nèi)
12、存夠大就行。清單 5 展示了使用 php 時(shí)擁有的靈活性。清單 5. php 解析清單 5 中的代碼產(chǎn)生以下輸出:coffees taste is great he drank a number of he drank some coffees he drank some coffees清單 5 中的代碼并不是直到 php v5.3.0 才有的。這里給出這段代碼,只是為了提醒您字符串處理支持和一些解析規(guī)則。但是,php v5.3.0 增加了增強(qiáng)的 heredoc 語(yǔ)法支持。清單 6 顯示了一個(gè)簡(jiǎn)單的例子。清單 6. php v5.3.0 heredoc 的應(yīng)用 foobar hello world! foobar; ?清單 6 中的代碼產(chǎn)生以下令人驚嘆的輸出:hello world! 那么,清單 6 有什么特別之處呢?php v5.3.0 中的 heredoc 支持使用雙引號(hào)。其優(yōu)點(diǎn)主要在于,雙引號(hào)中的內(nèi)容不會(huì)被解析,這樣便有了更大的靈活性。基本上,這只是在已經(jīng)強(qiáng)大的字符串支持的基礎(chǔ)上增加了更多的靈活性。php v5.3.0 的在線參考包括更多關(guān)于這個(gè)主題和 php v5.3.0 其他相關(guān)主題的資料。php 是一項(xiàng)有吸引力的技術(shù)。它為拼
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版環(huán)保技術(shù)轉(zhuǎn)移與轉(zhuǎn)化合作協(xié)議4篇
- 2025航空貨運(yùn)保險(xiǎn)及全球理賠服務(wù)合同3篇
- 二零二五年度城市綜合體物業(yè)管理合同
- 二零二五年度高端智能設(shè)備采購(gòu)合同范本4篇
- 二零二五年度城市更新項(xiàng)目舊廠房改造租賃合同3篇
- 2025年物流倉(cāng)儲(chǔ)中心委托經(jīng)營(yíng)與服務(wù)協(xié)議3篇
- 2025版萬(wàn)科地產(chǎn)商鋪買(mǎi)賣(mài)合同規(guī)范范本3篇
- 2025年度體育培訓(xùn)機(jī)構(gòu)教練聘用合同模板4篇
- 2025年度出租車(chē)企業(yè)資產(chǎn)重組與股權(quán)轉(zhuǎn)讓協(xié)議3篇
- 二零二五年度外墻仿石漆項(xiàng)目融資與投資合同3篇
- 國(guó)家中醫(yī)藥管理局發(fā)布的406種中醫(yī)優(yōu)勢(shì)病種診療方案和臨床路徑目錄
- 2024年全國(guó)甲卷高考化學(xué)試卷(真題+答案)
- 汽車(chē)修理廠管理方案
- 人教版小學(xué)數(shù)學(xué)一年級(jí)上冊(cè)小學(xué)生口算天天練
- (正式版)JBT 5300-2024 工業(yè)用閥門(mén)材料 選用指南
- 三年級(jí)數(shù)學(xué)添括號(hào)去括號(hào)加減簡(jiǎn)便計(jì)算練習(xí)400道及答案
- 蘇教版五年級(jí)上冊(cè)數(shù)學(xué)簡(jiǎn)便計(jì)算300題及答案
- 澳洲牛肉行業(yè)分析
- 老客戶(hù)的開(kāi)發(fā)與技巧課件
- 計(jì)算機(jī)江蘇對(duì)口單招文化綜合理論試卷
- 成人學(xué)士學(xué)位英語(yǔ)單詞(史上全面)
評(píng)論
0/150
提交評(píng)論