欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP 已經(jīng)成熟

 更新時(shí)間:2006年12月04日 00:00:00   投稿:mdxy-dxy  
這篇文章主要介紹了PHP 已經(jīng)成熟

由于 PHP 正在成熟,因此是快速即編即用的腳本編制人員與了解 UML 的面向?qū)ο蟮拈_發(fā)人員“思想達(dá)成一致”的時(shí)候了。

  很少有編程語言能夠像 PHP 這樣迅速地得到普及?,F(xiàn)在廣泛宣傳的那個(gè)關(guān)于自己動(dòng)手做 (DIY) 的腳本編制語言改變 IT 業(yè)的故事表明,成功不一定總是來自于系統(tǒng)計(jì)劃和市場研究。但是現(xiàn)在的實(shí)際問題是這種成功如何能夠?yàn)辇嫶蟮?IT 業(yè)所接受。Oracle 以及其他幾個(gè)大的參與者正在關(guān)注 PHP 錚錚事實(shí)表明,這種語言已經(jīng)成熟。

  直到現(xiàn)在,成功也只是剛剛“出現(xiàn)”。數(shù)量不斷增長的愛好者已經(jīng)聚集在 PHP 周圍,就象聚集在一個(gè)天才神童身邊一樣。但是既然這個(gè)孩子正在長出胡子,并開始以平等的地位與成年人交談,那么早期的擁護(hù)者會(huì)適應(yīng)這種變化嗎?

  PHP 與大部分主要的開放源代碼項(xiàng)目一樣,是正在成為主流技術(shù)的過程中的一種基本現(xiàn)象。PHP 會(huì)使那些使它獲得名譽(yù)的人們失望嗎?它會(huì)達(dá)到龐大的 IT 業(yè)的期望嗎?

兩種編程文化的故事

  PHP 的成功吸引了不同背景人士的注意。早期的 Rasmus 的擁護(hù)者(如果您能諒解那些在開放源代碼圈內(nèi)不常出現(xiàn)的略以救世者自居的語氣)習(xí)慣于快速的即編即用的腳本編制方法,他們現(xiàn)在必須對(duì)付那些了解 UML、面向?qū)ο?(OO) 編程的開發(fā)人員,這些開發(fā)人員決心使 PHP 與其他現(xiàn)代的開發(fā)工具并駕齊驅(qū)。雙方都很了解 Web 開發(fā),都擁有強(qiáng)大的文化。忽略任何一方都是不明智的。

  早期的 PHP 類型了解 Web 開發(fā)的哪些方面,它擅長做什么,不擅長做什么?它了解很多關(guān)于設(shè)計(jì)的問題。它的風(fēng)格有時(shí)可能會(huì)有問題,但可以看出它擁有 HTML 和 CSS 功能,不必說更為流行的多信息互聯(lián)網(wǎng)應(yīng)用程序 (RIA) 技術(shù)了。它總是那么年輕,卻經(jīng)常出現(xiàn)在 PHP 論壇中。術(shù)語“面向?qū)ο?rdquo;對(duì)于它可能具有負(fù)面的涵義。它的代碼很扼要,注重表現(xiàn)而不注重可維護(hù)性。

  由于采用類型松散的變量和為其 HTML 代碼填充 <?php?> 語句,因此 UML 類型將更缺乏吸引力。它將要考慮應(yīng)用程序體系結(jié)構(gòu)、類級(jí)代碼重用、團(tuán)隊(duì)合作以及源代碼管理。它知道,即使復(fù)雜度適中的網(wǎng)站首先也是一個(gè)應(yīng)用程序,而設(shè)計(jì)不良的應(yīng)用程序會(huì)導(dǎo)致工期延誤、惹惱客戶甚至丟掉工作。

  乍一看來,后者似乎更適應(yīng)于需求越來越多的環(huán)境,在這種環(huán)境中,Web 開發(fā)將會(huì)越來越多地受到營銷策略和經(jīng)濟(jì)因素的驅(qū)動(dòng)。但是我們是否應(yīng)該把前者看作瀕臨滅絕的物種?或許不應(yīng)該這樣。如果我們承認(rèn) Web 是與臺(tái)式機(jī)系統(tǒng)差別很大的一種媒介 — 更不要說大型機(jī)了(還有人記得 3270 嗎?),在大型 機(jī)環(huán)境中產(chǎn)生了占統(tǒng)治地位的開發(fā)方法 — 則我們可能會(huì)得出結(jié)論,畢竟可以從這種成功卻相對(duì)雜亂的方法中學(xué)到很好并且有效的東西。

  讓我們來回顧實(shí)際的問題,以便在其可能發(fā)生之前加以克服,并回顧一些實(shí)際的工作方法。

彌補(bǔ)文化差距

  現(xiàn)在 PHP5 即將把面向?qū)ο蠹夹g(shù)帶入到 PHP 世界中。Zend 引擎修改 (ZE2) 正在將對(duì)象引入到該語言的核心。不僅新的語言構(gòu)造鼓勵(lì)對(duì)象編程風(fēng)格,而且語言的實(shí)施也正在適應(yīng)其他的面向?qū)ο蟓h(huán)境。例如,不再以缺省方式將對(duì)象進(jìn)行來回的復(fù)制,而是通過引用來進(jìn)行處理。引入了新的關(guān)鍵字(如 final 或 static),它們只與對(duì)象概念相關(guān),是對(duì) Java 風(fēng)格的保留;其他特性(如委托)鼓勵(lì)使用對(duì)象設(shè)計(jì)模式。(期待在幾個(gè)月的時(shí)間后能夠聽到大家談?wù)?ldquo;原有的 PHP4”。) 這種深刻的變化來自于向當(dāng)前占優(yōu)勢的編程模型進(jìn)行無情的轉(zhuǎn)移。無論您喜不喜歡,對(duì)象方法都將會(huì)流行,因?yàn)樗炎C明自己在提供復(fù)雜應(yīng)用程序方面最有效,無論它們是不是 Web 應(yīng)用程序。這使得我們別無選擇,只能尋找富于想象力的方法來協(xié)調(diào)兩種文化,以便具有設(shè)計(jì)思想的人與了解體系結(jié)構(gòu)的人能夠取長補(bǔ)短。

  為此,必須開發(fā)(或從其他平臺(tái)中變換出)各種方法,以便在將其包含在清晰的界限內(nèi)的同時(shí)獲得語言的多功能性。這樣,編程創(chuàng)造力的“孤島”就可以存在于強(qiáng)健的體系結(jié)構(gòu)中。

  一個(gè)明顯的事實(shí)是,盡管 PHP CMS 或應(yīng)用程序框架的數(shù)量呈爆炸性增長,卻沒有關(guān)于它們的一致意見。經(jīng)常出現(xiàn)的報(bào)怨是,無論您的項(xiàng)目是什么,現(xiàn)有系統(tǒng)都不能完成任務(wù)。人們大都開始于對(duì)若干系統(tǒng)的評(píng)估,而最后經(jīng)常是從頭開發(fā)自己的框架。這是為什么?

  在臺(tái)式機(jī)系統(tǒng)中,似乎已經(jīng)由操作系統(tǒng)徹底解決了 GUI 設(shè)計(jì)問題,與此相反,Web 是個(gè)原始視覺設(shè)計(jì)舉足輕重的平臺(tái)。Web 站點(diǎn)承載商業(yè)公司的形像和個(gè)性,可能會(huì)日益影響其收入。視覺創(chuàng)造力與品牌共同發(fā)揮作用,因此必須促進(jìn)它們的發(fā)展。

  同時(shí),必須能夠?qū)㈧`活的邏輯編入到應(yīng)用程序中,以便盡可能改善用戶體驗(yàn),應(yīng)牢記,用戶在 Web 上要比在臺(tái)式機(jī)系統(tǒng)中可能表現(xiàn)的更“菜”。

  當(dāng)設(shè)計(jì)人員不斷對(duì)程序員所設(shè)計(jì)的系統(tǒng)感到失望時(shí),這是個(gè)問題,而當(dāng)開發(fā)人員不得不將應(yīng)用代碼強(qiáng)行加入到不完備的門戶框架中時(shí),這同樣是個(gè)問題。最常見的結(jié)局就是無法令人滿意的折中 — 有些呆板的外觀、為了將應(yīng)用的復(fù)雜性限制在某個(gè)可管理級(jí)別而犧牲了很多可用性。(這種現(xiàn)象并不只限于 PHP 應(yīng)用程序。)

  為了徹底克服這些限制,設(shè)計(jì)人員和面向?qū)ο箝_發(fā)人員必須找到一種不阻礙對(duì)方工作的協(xié)作方法。最好的方法可能是從了解對(duì)方團(tuán)隊(duì)如何工作開始。

從技巧到產(chǎn)業(yè)

  此刻先不要考慮協(xié)作問題,讓我們觀察各自的實(shí)際操作。讓我們按照 PHP 的歷史順序開始,首先訪問一個(gè)“增強(qiáng) html”使用者的商店。

  進(jìn)行交易的工具非常類似于“純 html”使用者的工具:一些 html 編輯器,具有各種級(jí)別舒適特性和項(xiàng)目管理特性,并在某種程度上與 PHP、ASP、JavaScript 以及較次要工具相集成。

  讓我們花點(diǎn)時(shí)間仔細(xì)觀察一下代碼。我們首先會(huì)注意到,使用這些不同種類的工具生成的網(wǎng)站非常漂亮。我們?cè)谶@里不僅指技術(shù),也指天賦。由于擺脫了抽象編程因素的限制,Web 設(shè)計(jì)人員通過擺弄積極、微妙的情感效果(類似于機(jī)敏的裝飾人員在真實(shí)商店中所營造的效果)營造了令您網(wǎng)站的客戶感到安適的視覺環(huán)境。

  當(dāng)我們從經(jīng)過訓(xùn)練的面向?qū)ο缶幊陶叩慕嵌葋砜催@些代碼時(shí),事情卻突然變得很糟。代碼看上去就象它本身一樣:它是一次性的、用完即忘的工作,沒有為將來的發(fā)展或者為簡易的維護(hù)作出任何準(zhǔn)備。經(jīng)常這樣,的確如此。

  那么,這有什么不好嗎?它以后是否會(huì)成為一個(gè)難題,導(dǎo)致放棄部分或整個(gè)網(wǎng)站并從頭開始重建呢?或許不是。畢竟,真實(shí)商店的裝修經(jīng)常定期拆除并重建。因此,就這些櫥窗式的網(wǎng)站而言,牛仔風(fēng)格的 PHP 編程已經(jīng)夠用了。這種語言富含各種有助于實(shí)現(xiàn)旨在吸引訪問者注意的視覺效果的技巧。這里顯然與對(duì)象方法無關(guān)。

  一旦需要某些應(yīng)用邏輯時(shí),這種觀點(diǎn)就發(fā)生顯著的變化。您是否需要若干表單來收集有關(guān)您網(wǎng)站的??偷纳倭康臓I銷信息?如果您希望這種信息能夠很中肯,則最好添加校驗(yàn)代碼。如果這樣做,您應(yīng)該確保可以過濾惡意腳本或 SQL 指令侵入式攻擊。順便說一下,既然您正在閱讀 OTN 文章,因此您一定熟悉數(shù)據(jù)庫 (DB) 問題。您將要收集的這些信息將會(huì)存放在某些數(shù)據(jù)庫表中,而您的 PHP 代碼中的 SELECT 語句將反映這種數(shù)據(jù)庫結(jié)構(gòu)。從現(xiàn)在開始,這個(gè)網(wǎng)站已經(jīng)固定在您的業(yè)務(wù)基礎(chǔ)架構(gòu)中 — 它正在成為成熟的應(yīng)用程序。

  我們暫時(shí)不要管其所有的硬編碼鏈接、危險(xiǎn)的類型轉(zhuǎn)換以及安全漏洞,接著訪問最新的 PHP 面向?qū)ο髴?yīng)用程序裝配線。對(duì)于我們那些具有藝術(shù)家風(fēng)范的 Web 設(shè)計(jì)人員而言,這種地方可能并不熟悉,甚至可能并不友好。在這里不太看重技巧。Web 開發(fā)已經(jīng)產(chǎn)業(yè)化了。要想為這里所接受,您必須熟悉類、繼承、數(shù)據(jù)抽象以及大量的代碼封裝工具。

  團(tuán)隊(duì)協(xié)作需要規(guī)則。必須遵循編程慣例;必須將源文件提交版本管理和源代碼管理。文件根據(jù)嚴(yán)格的模塊化層次進(jìn)行組織。摒棄了那些有危險(xiǎn)的編碼技巧 — 尤其是那些耍小聰明的技巧。代碼不僅必須易讀,而且必須有良好的注釋。

  這樣可能令人厭煩,但卻很有效。現(xiàn)在我們正在創(chuàng)建 Web 應(yīng)用程序:內(nèi)聯(lián)網(wǎng)、商業(yè) Web 站點(diǎn)、電子市場、各種應(yīng)用程序,其中具有缺陷的設(shè)計(jì)都可能會(huì)導(dǎo)致停業(yè)。簡言之,我們正在克服復(fù)雜性。

  PHP 面向?qū)ο笱b配線的管理者并沒有選擇 PHP,因?yàn)樗麄儫釔圻@種語言。他們之所以這樣做,是因?yàn)樗坏芟衲切S械钠渌Z言一樣有效地完成工作,而且還是免費(fèi)的,并且沒有任何附加條件。

我們要走向何處?

  那么我們將如何利用由那些經(jīng)過 C++ 和 Java 培訓(xùn)的人們所提供的行業(yè)級(jí)方法,以完成對(duì)早期使用者所使用的多功能語言的專業(yè)技術(shù)的潛在補(bǔ)充?

  PHP5 將會(huì)動(dòng)搖很多習(xí)慣,因此這個(gè)問題可能為時(shí)尚早。有些人將采用一定程度的面向?qū)ο蠓椒?,而另一些人最終會(huì)了解面向?qū)ο蟮乃袃?nèi)容并成為它的信仰者。某些小環(huán)境可能會(huì)象過去那樣良好運(yùn)行并繼續(xù)興盛發(fā)展。

讓我們來實(shí)踐一下

  現(xiàn)在讓我們深入到基礎(chǔ)的技術(shù)級(jí)別,了解如何養(yǎng)成簡單的習(xí)慣,以及尋找簡單而有效的解決方案將會(huì)如何幫助我們準(zhǔn)備好應(yīng)對(duì)即將來臨的變化。大量非常簡單的慣例有助于促進(jìn)編程,并使應(yīng)用程序準(zhǔn)備好進(jìn)行擴(kuò)展。

  命名慣例(C++ 編程人員的習(xí)性)是最容易的方式。如果您已經(jīng)大量使用了代碼庫(例如 PEAR),則將其慣例作為自己的慣例可能是個(gè)好主意;否則應(yīng)制定您自己的內(nèi)部規(guī)則。簡化的匈牙利批注(根據(jù)其匈牙利發(fā)明者 Charles Symonyi 而命名)可在松散類型所允許的范圍內(nèi)廣泛應(yīng)用。您還可以使用下劃線作為類成員的前綴。另一個(gè)有用的習(xí)慣是,向那些并不用于從類外部進(jìn)行調(diào)用的方法(屬于一個(gè)類的函數(shù))附加一個(gè)特殊的前綴(例如 impl_)。

  無論您采用什么命名慣例,都要盡可能使您的代碼明確清楚。這樣,經(jīng)過訓(xùn)練的人員就可能在滿屏的 PHP 中發(fā)現(xiàn)編程錯(cuò)誤,只因?yàn)樗瓷先ゾ陀袉栴},就象肖像上的一個(gè)污點(diǎn)。

  命名慣例的另一個(gè)重要方面是避免名稱沖突,使得在大范圍中重用代碼成為可能。經(jīng)驗(yàn)告訴我們,程序員在命名編程對(duì)象方面并不總是非常富有想像力。很有可能,存在很多的 Page 類,而且也不是沒有可能當(dāng)您要重用兩個(gè) Page 類時(shí)卻發(fā)現(xiàn),它們只是名稱相同而用途卻迥異。真不夠走運(yùn)的。從長遠(yuǎn)看來,重命名將會(huì)帶來維護(hù)問題。您最好一開始就避免這個(gè)問題。生成 GUID 將會(huì)矯枉過正、難看(例如 _16B280C5_EE70_11D1_9066_00C04FD9189D_Page?。┎⑶矣秀S?PHP 的精神。

  一種簡單并可以防止沖突的方法是,通過將類的幾個(gè)不同方面關(guān)聯(lián)到其名稱中(例如 GalleryPage),確保內(nèi)部類的唯一性;而后,為了消除與您控制范圍之外的類發(fā)生沖突的各種可能,您可以按 Java 的方式將您擁有的域名的保留版本作為它的前綴 (com_mydomain_GalleryPage)。

  要養(yǎng)成的另一個(gè)習(xí)慣不需要您花費(fèi)什么,并且當(dāng)某個(gè)應(yīng)用程序范圍的意外變化不可避免時(shí),它可以節(jié)省您的工作,這就是將最常用的基本語句封裝在一個(gè)單獨(dú)的渠道中。例如,除了調(diào)試代碼,在整個(gè)應(yīng)用程序中只應(yīng)該有一個(gè)“響應(yīng)”語句,它應(yīng)該在某個(gè)函數(shù)(或單獨(dú)的類方法)中。如果某個(gè)新環(huán)境中需要對(duì)輸出進(jìn)行預(yù)處理或重定向,則您知道應(yīng)該將所需的幾行代碼寫在哪里,而不必面對(duì)那種搜索和編輯大量文件的令人沮喪的情況。

  錯(cuò)誤處理不必像 C++ 中那樣嚴(yán)格 — 在 C++ 中,一個(gè)懸空指針 (dangling pointer) 或者緩沖區(qū)溢出可能極具破壞性。當(dāng)沒有危及數(shù)據(jù)完整性時(shí),試著大方地放下架子告訴訪問者,盡管某些功能不太完善,但她可以再試試。一個(gè)經(jīng)常被忽視的好幫手是標(biāo)準(zhǔn)的 set_error_handler() 函數(shù)。這是另一個(gè) — 這次是基本事件 — 封裝到一個(gè)集中位置(其中所有代碼都專門用于處理這些基本事件)的例子。如果您希望保留所有發(fā)生錯(cuò)誤的事件日志,以便找出重復(fù)發(fā)生的問題,則應(yīng)該在這里完成這項(xiàng)工作。

  在我們結(jié)束低級(jí)編程討論之前,還有另外一個(gè)救命招術(shù)。在 PHP5 中,缺省情況下,分配或傳遞對(duì)象引用(引用是對(duì)象的句柄,而不是對(duì)象本身或?qū)ο蟮母北荆V灰覀冞€需要使用 PHP4,就必須認(rèn)真注意對(duì)象的傳遞方式。某些微妙之處可能使您心神不寧。例如,以下語句導(dǎo)致 $obj2 成為 $obj1 的副本;這并不奇怪。

$obj2=$obj1;

  函數(shù)將使用副本并返回副本,除非另有指定 — 我們只得接受這種情況。以下示例導(dǎo)致很多了難以跟蹤的錯(cuò)誤:

class ObjectKeeper {
    var $_obj; // Whatever object is
    function & get_object() {
        return $this->_obj;
    }
}
//引用可以良好地返回?,F(xiàn)在陷阱出現(xiàn)了:
$keeper = new ObjectKeeper();
$obj1 = $keeper->get_object();
$obj1->modify();
$obj2 = $keeper->get_object(); // Ask new reference to same object
if ($obj2->is_modified()) {
    echo 'OK'; // 這將永遠(yuǎn)不會(huì)打印
}


正確的語句應(yīng)該是:

$obj1=&$keeper->get_object(); // 注意,是“=&”而非“=”

  如果沒有 =&,則返回的引用所指向的對(duì)象的副本被分配給 $obj1,而無論您對(duì)您認(rèn)為正確的引用進(jìn)行什么操作,也不會(huì)影響原始對(duì)象的狀態(tài)。換言之,您的更新將會(huì)丟失。

  在協(xié)調(diào) Web 設(shè)計(jì)人員與程序員的文化方面,模板可能會(huì)大有幫助。它們通常包括布局中所配備的一切(主要是 HTML 代碼),而在生成頁面時(shí),模板引擎填入所有可變的內(nèi)容。大部分模板引擎帶有高速緩存機(jī)制,確保相關(guān)的耗費(fèi)資源的處理只發(fā)生在數(shù)據(jù)源更新要求進(jìn)行這些處理的時(shí)候。

接下來的步驟


論壇:Oracle 上的 PHP

PHP 漫游者指南

開放源代碼開發(fā)人員中心

Oracle + PHP 疑難解答指南

PHP 腳本編制:隨心所欲的代碼逐漸流行

Oracle + PHP 使用入門

在 Linux 上安裝 Oracle、PHP 和 Apache

  模板引擎允許在相當(dāng)大的程度上將布局和圖形分在一端,將商務(wù)邏輯分在另一端。最流行的模板引擎可能是 Smarty,它也恰好被集成在很多開放源代碼的 CMS 和框架項(xiàng)目中。

  最后,必須注意當(dāng)邏輯超出基本的搜索取代式的替換時(shí),模板引擎傾向于提供編程方言。將來的方法很可能依靠 XSLT 技術(shù),而 PHP5 中的擴(kuò)展 XML 支持將會(huì)因此而改變很多。

  最后卻是相當(dāng)重要的一個(gè)實(shí)踐方面:從眾所周知的庫中重用一流的代碼。我們的研究將只限于 PEAR,因?yàn)樗F(xiàn)在是標(biāo)準(zhǔn) PHP 發(fā)行版本中的一部分。

  PEAR 可能目前更接近于真正標(biāo)準(zhǔn)的 PHP 軟件組件。嚴(yán)格選擇提供者以及嚴(yán)格的質(zhì)量標(biāo)準(zhǔn)確保了組件與商業(yè)級(jí)組件一樣優(yōu)秀。版本控制慣例為您提供精確控制,以確定組件的哪個(gè)版本適合于您的應(yīng)用程序。PEAR 提供從表單處理到數(shù)據(jù)庫抽象層 (PEAR::DB) 等一系列豐富的功能,并包括 Web 服務(wù)或 WebDAV 支持等高級(jí)特性。
  不用說,通過熟悉 PEAR 以及類似的 PHP 代碼庫,您可以節(jié)省很多天緊張的研發(fā)工作。

PHP5 呼之欲出

  PHP 已經(jīng)使自己成為最大的開放源代碼成功的故事之一,與 Linux 和 Apache 齊頭并立。盡管尚有不理想之處,但它已經(jīng)在 IT 界牢牢站穩(wěn)了腳跟,并且其龐大的基層用戶群仍然很喜歡它。

  PHP5 可能會(huì)促進(jìn)負(fù)擔(dān)沉重的 Web 應(yīng)用程序的開發(fā),與數(shù)據(jù)庫進(jìn)行交互作用的業(yè)務(wù)邏輯層越來越多地接受 PHP 代碼。同時(shí),靈活的編程方法將會(huì)越來越多地使用 XML 技術(shù),使 Web 設(shè)計(jì)人員更容易與開發(fā)人員和軟件設(shè)計(jì)人員進(jìn)行無摩擦的協(xié)作。
  我們期待看到新一代非常具有吸引力并且非常好用的基于 PHP 的 Web 應(yīng)用程序。

相關(guān)文章

最新評(píng)論