2009-04-18 10 views
22

私は主にmysqlと連携して作業するときに、特に優れた開発方法を探しています。私は質問を検索しましたが、関連する質問は見つかりませんでした。私は、経験を通して得た練習と知恵を分かち合う人がいれば感謝しています。PHP開発のベストプラクティスとプラクティスは何ですか?

いくつかのコーディング標準を除いて、私はデザイン基準と一般的な建築実務も探しています。

背景:私はJavaで仕事を始めましたが、何年も前にC#/ .NETのスペースに移動しました。私は今3年以上建築家を練習してきました。ちょうど人々にいくつかのアイデアを与えるこれを追加しました。

答えて

26

私は、PHPの歴史を熟知していることをお伝えしたいと思います。私は、そうすることで、今日のPHPとそれがどこから来たのかをより深く理解できたことを知っています。

要するに、PHPはRasmus Lerdorfによって、実際に重い持ち上げを行っていたCコードの単純なラッパー関数を提供し、動的に動作する必要のあるテンプレートを書くための簡単な言語/構文を持つことができました。 PHPとそれを取り巻くコミュニティの成長は、有機的なものとして最もよく説明されています。有機的に成長する他のものとよく似ていますが、それはちょっと乱雑で、非対称で、全く合わないものです。

PHPとそのコミュニティを理解したら、それが存在するものとそうでないもののすべてについてPHPを採用する必要があります。このアイデアは、テリー・チェーの記事PHP without PHPで最もよく紹介されました。彼は具体的にはファンキーなキャッシュの概念について話していますが、PHPのようにPHPをコーディングするというコンセプトを取り入れています。言い換えれば、PHPをJava、C#、Rubyなどにしようとしないでください。もしあなたが失敗すればあなたの人生は嫌になるでしょう。

How is PHP Done the Right Way?をご覧ください。

スパゲッティコードのアンチパターンを使用しているPHP開発者の多くは、最初から最後まで避けなければならないと言わなければなりません。言い換えれば、SQLクエリ、データの操作、データの検証、およびhtml出力がすべて単一のPHPスクリプトで記述されているコードを記述しているとわかった場合、間違っていることになります。

これを避けるには、ウェブ指向のデザインパターンの性質について何かを学ぶことが役に立ちます。これはもちろん、オブジェクト指向プログラミングに精通していないことを意味します。しかし、PHPでオブジェクト指向プログラミングの基礎を学んだら、MVCデザインパターンを調べてください。これを正確に実装する必要はありませんが、Model-View-Controllerの基本的なアイデアを使用することで、初心者が作成しやすいBLOBスクリプトの問題を回避できます。

この点については、ウェブ上で見つけたコードスニペットを塩分で取り込むことを強くお勧めします。そして、あなたが本でそれを見つけたとしても、その本の古さを考慮する必要があります。 PHPは言語としてかなり進歩しており、年齢によっては3.xや4.xで有効だった回避策を使用している可能性があるため、単にコードサンプルを額面で受け取ることはできませんより新しい機能が必要です。

すばらしいことは、さまざまなフレームワークを調べることです。好きなものとそうでないものを評価します。おそらく、フレームワークのドキュメントに付属しているクイックスタートのそれぞれを処理して、好きなものや好きでないもののアイデアを得ることができます。また、他のオープンソースプロジェクトと同様に、フレームワークのコードを見直して、他の人がPHPでどのように行動するかを知ることを強くお勧めします。また、すべてのPHP開発者は独自のペット・ピープとニュアンスを持っており、私たちの誰も常に正しいわけではないので、塩の粒ですべてを取ってください。実際には、PHPの大部分は何かするかなり良い方法がいくつかあります。

フレームワークによって実装されているパターンをよく理解したい場合は、一般的なSOの一般的な言語でスローされているパターンを理解したい場合は、FowlerGoFをお読みください。彼らはあなたの開発努力に使用する基本的なデザインパターンについて教えてくれます。

具体的に以下を監視:機能の多くを含んで

  • 機能ファイルを。これは、関数を必要とするスクリプトに関数を直接入れる必要があるか、非常に特殊な関数の役割を果たすために作成できるより一般的な関数を作成する機会を示している可能性があります。もちろん、密接にカプセル化されたクラスを構築している場合は、この問題に取り組むべきではありません。
  • do everythingクラスです。これはブロブのアンチパターンであり、実際には厄介です。この場合、結束とカプセル化がどこで分割されているのかを特定し、それらの点をいくつかの小さく、より保守可能なクラスに分割する機会として使用する必要があります。
  • パラメータクエリまたは少なくともエスケープされたパラメータを使用しないSQLクエリ。非常に、非常に、非常に悪い。
  • 検証が実行されていないか、クライアント側でのみ実行されているすべてのインスタンス。ウェブ用に開発するときは、サイトとユーザーを安全に保つ唯一の方法は、他のすべての人が黒い帽子であると仮定することです。
  • テンプレートエンジンを使用する突然の強迫観念。 PHPはテンプレート言語です。テンプレートエンジンを使用する前に、別のレイヤーをWebサイトに追加する明確な理由があることを確認してください。さらに読書のために

以下をご覧ください:

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

私はテンプレートエンジンの警告方法が好きです。私は、人々がテンプレートエンジンをテンプレート言語として設計された言語にスローする理由を理解したことはありません。 –

+0

こんにちはGabriel、 詳細な回答ありがとうございます。私は本当にあなたの考えに感謝します。私はすべてのデザインパターンに精通しています。私はJavaでキャリアをスタートし、ついにC#とASP.NETの世界に移りました。私は適切な場所にデザインパターンのほとんどを使用しました。今はアーキテクトとして、私はいくつかの良いプラクティスとコーディング方法論を取り入れたいと思っています.net appsと共にいくつかのPHPアプリケーションがあります。上記の理由でPHPに同じ制限を課したくありません。 –

+0

SMARTYのようなテンプレートを使用すると時間とエネルギーが無駄に過ぎると言っていますか? –

10
  • コード標準を使用してください。
  • ユニットテストを使用します。 PHPUnitとSimpleTestは、PHPの主なxUnitシステムです。
  • オブジェクト指向です。
  • バージョンコントロールを使用します。任意のバージョンコントロール、それを使用してください。
  • 該当する場合は、フレームワークを使用してください。 Zend、CodeIgniter、Symfony、CakePHPが主なものです。
  • フレームワークがない場合は、少なくともORMを使用してください。 PropelとDoctrineは主要なものです。
  • ドキュメント。重くPHPdocなどを使用してください。

PHPには豊富なツールがあります。それらを使用して、整備可能なコードを書いてください。みんなをもっと幸せにするでしょう。

3

PDOまたはmysqliを使用してください。これらのいずれかを使用すると、より安全で効率的な準備文が得られます。古くからのmysqlインタフェースを使って、いくつのサンプルとチュートリアルを見ているのか信じられません。 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パターンです。

関連する問題