很早就想寫這篇文章了,但一直沒有時間完成它。不是說我來告訴大家如何做,我更希望本文只是做為一個引子,與大家來討論關於如何建立一個有效地、靈活的網絡應用程序。
經過了2-3年的網頁應用程式開發工作,我的開發經驗變得更加生動了,回過頭來看我以前為Geocrawler寫的程式碼,簡直不敢相信這是我的。由於GPL的原因,在PHPBuilder中的原始碼也是良莠不齊的。
最近我做為一個有經驗的PHP開發者,一直在幫著寫SourceForge,我想這顯示出了最終結果的一個範圍。好的程式碼應被分成了多個部分,合適的函式庫及函數調用,清楚的資料庫結構,站點的每一個部分與其它部分都是相對獨立的。
但是,這仍不是最好的。如果我可以重做,我將更多的關注於HTML層與資料層的分離,透過物件及清楚的函數庫實現這一點。
優美的圖形
我知道經理們喜歡用優美的圖形及圖表來描述它們,這將給我們留下最好的印象。用這種隱藏在一個結構後的想法,你可以把你的邏輯與外觀分離,這意味著任何一個複雜的程式都可以用"API/Data Access Layer"來表述。
與其你把安全偵測、更新的句子等放在HTML層中,不如把它們整體放在你的API層裡。而這個HTML層只含有簡單的函數呼叫和傳回的陣列、物件或自定的其它什麼,以及一些資料庫的檢索結果的集合等。
如果你這樣做了,頂層將是非常的瘦小,你可以方便地創建和維護它。
如下的例子中,這個HTML介面中只有一些API層中的函數的直接調用,一些HTML工具庫(它能產生一個彈出框等等),和一些從資料庫抽象層中調用的資料庫操作方法(你不需要綁定某一個特別的資料庫)。
基礎
靈活的PHP程序結構最基本的方面有以下幾點:
資料庫無關
界面無關性
可移植性
面向對像或至少應由函式庫組成
還有其它的?
當然還有一些其它的東西,但我認為那都是太大了,或許你自己能指出它們。
讓我們詳細地談談它們每一條吧。
1、資料庫無關性
你從不知道你的網站將會在哪裡運行,當然在你創建它時,你希望它變和得很大並且有很高的流量。所以你不想把你自己約束在 MS Access 上面或它什麼輕便的資料庫系統。雖然你不能立刻地插入各種不同的資料庫系統,但是你有可能很方便地在它們中間切換。你有一些不同的選擇可以把你的資料庫呼叫抽象化。在PHP中一個奇特的方法是你必須為每個不同的資料庫系統寫出不同的程式碼,因為在PHP中對每一種不同的資料庫的存取函數是不同的。為了避開這一點,你可以使用一個抽像地資料庫存取層,就像PHPLib、下一個版本的PEAR、以及我們在SourceForge中所描述的。
2、介面無關性
一個應用程式是它的技術更重要還是它所運作的網站更重要?我們並不能真正知道。我從來不相信這一點——HTML是一個標準。特別是對於一個網頁應用程式而言,介面發生了改動,這意味著我們必須總是重寫。但是如果你的應用程式是很大很複雜的,你就要為你的資料庫建立一些其它的介面了,只要你不想在你的網站程式中到處copy&paste你的訪問檢查等程式碼。這也意味著,如果你正確地設計了你的應用程序,你可以很容易地改寫你的網站讓它適應WAP,只要簡單地寫一個小的WAP介面,並讓它呼叫你的資料庫存取物件而已。但如果你沒有很好地設計你的程序,你把你的HTML版改成WAP版是一個複雜的工程。
我把這個想法也帶入了SourceForge中,我們有一個巨大的用戶群,為我們發送/接收bugs、任務等。首先,我們指出所有的這些將通過我們的web頁面接口,然後,由於Eric Raymond 和其他人給的壓力,我們決定用XML來做資料庫的外部接口。
幸運的是我們曾在四月已把程式的核心邏輯程式碼與它的介面分開了。我將試著表達我們是如何做到的,希望對你的工作有所幫助。
這個SourceForge的bugs追蹤器和其它的一些工具被分成兩個函式庫-這個HTML函式庫和資料存取函式庫。這個資料存取庫檢查輸入的值的正確性,處理安全校驗,並且當成功/失敗時回傳TRUE 或 FALSE。
由於簡化的原因,這個例子並沒有基於一個完善的對像模式,那樣我還要解釋這個基類和它的一些衍生類等等,我想這個例子將給你一個最普通的想法。HTML 函式庫的範例
//connect to database
require ("database.php");
//common utils like header/footer HTML
require ("html. php");
//data access library
require ("bug_data.php");
echo site_header("Page Title");
echo site_header("Page Title");
e
e"
Updating A Bug
";
if (bug_data_update($field1,$field2,$field3)) {
echo "
Update Failed!
";
} else {
echo "
Updated Bug Successfully
";
//echo the global error string
echo $feedback;
}
echo site_footer();
?>
Data 存取庫的範例
3、可移植性
毫無疑問,你不想讓你的程式碼只能用於一個固定的站點,將來我們可能改變色彩的選擇、元素的名稱、字體或其它一些什麼,這樣應設置一個config文件,它被多個頁面所包含。這些放入一個函數,在任何需要的地方呼叫它們。
4、物件導向/函數化
我們不是用COBOL開發,所以這意味著我們可以把進程分成多個函數的呼叫。有時只是調用一小段其它的函數並返回這個結果。想改變你的驗證系統,你不得不改動每一個頁面,其實你應該可以透過改動函數庫裡一個普通的函數就完成這個變動的。於一個地方,你就要考慮把它放入一個庫裡了。 ,我將在下一篇文章中來討論它們。
http://www.bkjia.com/PHPjc/314028.html
www.bkjia.com
true

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。