私は、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の一般的な言語でスローされているパターンを理解したい場合は、FowlerとGoFをお読みください。彼らはあなたの開発努力に使用する基本的なデザインパターンについて教えてくれます。
具体的に以下を監視:機能の多くを含んで
- 機能ファイルを。これは、関数を必要とするスクリプトに関数を直接入れる必要があるか、非常に特殊な関数の役割を果たすために作成できるより一般的な関数を作成する機会を示している可能性があります。もちろん、密接にカプセル化されたクラスを構築している場合は、この問題に取り組むべきではありません。
- 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
私はテンプレートエンジンの警告方法が好きです。私は、人々がテンプレートエンジンをテンプレート言語として設計された言語にスローする理由を理解したことはありません。 –
こんにちはGabriel、 詳細な回答ありがとうございます。私は本当にあなたの考えに感謝します。私はすべてのデザインパターンに精通しています。私はJavaでキャリアをスタートし、ついにC#とASP.NETの世界に移りました。私は適切な場所にデザインパターンのほとんどを使用しました。今はアーキテクトとして、私はいくつかの良いプラクティスとコーディング方法論を取り入れたいと思っています.net appsと共にいくつかのPHPアプリケーションがあります。上記の理由でPHPに同じ制限を課したくありません。 –
SMARTYのようなテンプレートを使用すると時間とエネルギーが無駄に過ぎると言っていますか? –