2009-04-18 86 views
22

我主要在與mysql結合使用時主要尋找良好的開發實踐。我搜索了這些問題,但找不到任何相關問題。如果有人分享他們通過經驗獲得的實踐和智慧,我將不勝感激。什麼是PHP開發的最佳模式和實踐?

除了一些編碼標準,我還在尋找設計標準和常見的建築實踐。

背景:我從Java開始我的職業生涯,多年來我轉移到C#/ .NET空間。我已經練了三年多了。只是增加了這個給人們一些想法。

回答

26

我建議大家熟悉一下PHP的歷史,我知道這樣做讓我對PHP今天是什麼以及它來自哪裏有了更多的瞭解。

簡而言之,PHP由Rasmus Lerdorf編寫,爲C代碼提供了簡單的包裝函數,實際上它正在進行繁重的工作,以便他可以使用更簡單的語言/語法編寫需要動態表現的模板。 PHP和圍繞它的社區的發展最好被描述爲有機的。就像其他有機生長的東西一樣,它不僅有點混亂,不對稱,而且完全不完全一致。

一旦你瞭解了PHP及其社區,你就需要擁抱PHP所有的東西和它所沒有的東西。這個想法最好由Terry Chay在他的文章PHP without PHP中提出。他特別談論時髦緩存的概念,但他比我見過的任何人都更好地捕獲了PHP編碼的概念,就好像它是PHP而不是(在此插入最喜歡的語言)。換句話說,不要試圖將PHP變成Java,C#,Ruby等,因爲如果你這樣做,你將會失敗,並且你會恨你的生活。

看看 How is PHP Done the Right Way?

我必須說,你必須首先,最後,並始終避免大多數PHP開發人員傾向於使用意大利麪代碼反模式。換句話說,如果你發現你正在編寫包含sql查詢,數據操作,數據驗證和html輸出的代碼,所有這些都在一個php腳本中,那麼你就錯了。

爲了避免這種情況,學習一些關於面向Web的設計模式的性質會有所幫助。這當然排除了對面向對象編程的熟悉。但是,一旦你已經在PHP中學習了面向對象編程的基礎知識,請研究MVC設計模式。您不必完全實現這一點,但使用Model-View-Controller的基本思想可以避免大多數新手傾向於創建的blob腳本問題。

在這一點上,我強烈建議你在網上找到任何代碼片斷,即使你在書中找到它,你也不得不考慮這本書的年代。 PHP作爲一種語言已經有了很長的路要走,你不能僅僅以面值的方式獲得代碼樣本,因爲根據年齡的不同,他們可能會使用在3.x或4.x中有效的變通辦法,但不再是簡單的更新的功能需要。

要做的一件好事就是研究那裏的各種框架。評估你喜歡什麼,不喜歡什麼。也許甚至可以處理隨框架文檔提供的每個快速入門,以便您可以開始瞭解您喜歡和不喜歡的內容。我強烈建議您從框架以及其他幾個開源項目中查看代碼,以便了解其他人如何在PHP中進行操作。再說一遍,因爲每個PHP開發人員都有自己的寵物小竅門和細微差別,而且我們每個人都無所不能。事實上,大部分時間使用PHP都會有幾種很好的方法來做一些事情。

如果你想更好地理解框架所實現的模式,並且通常在SO上使用普通白話,我建議你閱讀FowlerGoF。他們將教授關於您在開發工作中使用的基本設計模式的所有內容。

特別注意以下:包含的功能地段

  • 功能的文件。這很可能代表需要將功能直接放在需要它們的腳本中,或者也可能表示有機會創建一些更通用的功能,以實現幾個高度特定功能的角色。當然,如果你要構建凝聚力強,封裝良好的類,你就不應該遇到這個問題。
  • 該做什麼課。這是一種反模式,真是令人討厭。在這種情況下,您需要確定內聚和封裝在哪裏崩潰,並將這些點用作將課程拆分爲幾個更小,更易維護的課程的機會。
  • SQL查詢不使用參數化查詢或至少轉義參數。非常,非常非常糟糕。
  • 驗證未執行或僅執行客戶端的任何實例。在爲網絡開發時,保持網站和用戶安全的唯一方法是假定其他人都是黑帽會員。
  • 使用模板引擎的突然迫切願望。 PHP是一種模板語言。確保在使用模板引擎之前,您有明確的理由在您的網站上添加其他圖層。

如要進一步瞭解,請看看下面:

PHP Application Design Patterns
Defend PHP - 有用的給你最常見的批評的想法。
Security of strip_tags and mysqlirealescapestring
What should Every PHP Programmer Know
How to Structure an ORM
Best Way to Organize Class Hierarchy
Main Components/Layers of PHP App
Why use Framework for PHP
Recommended Security Training for PHP

+1

我喜歡你如何警告模板引擎。我從來沒有真正理解爲什麼人們會將模板引擎投入到本身被設計爲模板語言的語言中。 – 2009-04-18 08:44:12

10
  • 使用編碼標準。
  • 使用單元測試。 PHPUnit和SimpleTest是PHP中的主要xUnit系統。
  • 面向對象。
  • 使用版本控制。任何版本控制,只需使用它。
  • 如果適用,請使用框架。 Zend,CodeIgniter,Symfony和CakePHP是主要的。
  • 如果沒有框架,至少使用ORM。推進和學說是主要的。
  • 文檔。重。使用PHPdoc或類似的。

有很多PHP的工具。請使用它們,並編寫好的可維護代碼。你會讓每個人都更開心。

3

使用PDO或mysqli。使用其中之一將爲您提供準確的陳述,這些陳述更安全,更高效。我無法相信我使用古代mysql接口看到了多少示例和教程。如果您決定嘗試使用postgres,PDO也會使切換到不同的數據庫系統變得更容易。

你可以看看使用Doctrine(http://www.doctrine-project.org)。它有一點自己的學習曲線,但提供了非常方便的功能。對我而言,最便利的部分是表格創建/測試數據加載功能。就個人而言,我更喜歡編寫自己的SQL並使用PDO執行它,而不是在生產中使用ORM。

主要了解SQL和MySQL。 http://www.kitebird.com/mysql-book/這本書很棒。 PHP方面並不是非常激烈; PDO照顧大部分。

0

你從Java背景,大部分在PHP的面向對象的東西是非常Javaesque。這意味着您(希望)在Java中學習的許多設計模式也適用於PHP(在較小程度上)。數據庫訪問的一個例子就是DataMapper模式。

相關問題