6

私は最初の実際のPHPWebサイトをプログラミングしていて、自分のコードを自分で読みやすくする方法を考えています。私が使用している参考書は、PHPとMySQL Web Development4thedです。

前述の本は、ロジックとコンテンツを分離するための3つのアプローチを示しています。

  • ファイルを含める
  • 関数またはクラスAPI
  • テンプレートシステム

これらの概念に頭を悩ませるのに時間がかかるので、私はまだこれらのどれも選択していません。ただし、ここでコピーして貼り付け、変更を加えるだけなので、コードは最初の2つのハイブリッドになりました。

プレゼンテーション側では、すべてのページに、ヘッダー、トップナビゲーション、サイドバーナビゲーション、コンテンツ、右側のサイドバー、フッターという共通の要素があります。

この本の関数ベースの例は、すべてのプレゼンテーション例を処理するこれらの表示関数を持つことができることを示唆しています。したがって、私のページコードは次のようになります。

display_header();
display_navigation();
display_content();
display_footer();

ただし、この本の例では、HTMLとPHPが次のように混ざり合ったprintステートメントが含まれているため、これは好きではありません。

echo "<tr bgcolor=\"".$color."\"><td><a href=\"".$url."\">" ...

私はむしろ、その逆ではなく、途中でいくつかのPHPを含むHTMLを使用したいと思います。

ページの先頭でデータベースからすべてのデータを取得して配列に配置するようにページを作成することを考えています。変数のデータも取得します。これらのプロセスのいずれかにエラーがある場合は、エラー文字列に入れます。

次に、HTMLコードで、foreachを使用してこれらの配列をループし、コンテンツを表示します。場合によっては、表示される変数がいくつかあります。エラー変数が設定されている場合は、適切な位置に表示します。

(補足として:私が理解していないことは、ほとんどのサンプルコードでは、データベースクエリなどでエラーが発生した場合、常に次のことが発生することです。

else echo 'Error';

サンプルコードでエラーが発生すると、HTMLが開始する前でもエコーアウトされることがあるため、これは私を困惑させます...)

ASP.NETを使用したことがある人のために、私はコードビハインドファイルとlblErrorにある程度慣れており、ここで同様のことをしようとしています。

私が理解していないのは、この「最初にロジックを実行し、次にプレゼンテーションを実行する」ことをどのように実行すれば、たとえばナビゲーションロジックやナビゲーションプレゼンテーションをすべてのページに複製する必要がないかということです。

インクルードファイルをいくつか実行する必要がありますか、それともここで関数を使用できますが、少し異なりますか?プレゼンテーションとロジックを分離するこれらの「スタイル」がもう少し徹底的に説明されている良い記事はありますか。私が持っている本には、このことについての段落が1つしかありません。

私が考えているのは、ここでPHPプログラミングを行うためのいくつかの概念や方法について話しているということですが、それらの用語はまだわかりません。

これは簡単な質問ではないことを私は知っています、私は自分の考えを整理するのに少し助けが必要です。

4

3 に答える 3

4

PHP で HTML をエコーアウトしないでください。代わりに、インラインで(邪悪な短いタグなしで)次のように記述します

<tr class="<?php echo $myclass; ?>">

ロジック/ビューを分離するのに役立つ他のオプションは、CodeIgniterのような PHP フレームワークを使用することです。

私は本を​​捨てる代わりに、関数やクラスなどのコア PHP スキルの学習に集中します。それから、いくつかの一般的なフレームワークを試してみます。

補足として: 私が理解していないのは、ほとんどのサンプル コードで、データベース クエリなどでエラーが発生した場合、常に次のようなエラーが発生することです。

これは、エラーが正しく表示されていないためです。エラーをセッションに保存してからページに表示する (クリアする) か、error_log関数を使用してエラー ログにスローする必要があります。error_log("Something happened in MyClass");

私が理解していないことは、たとえば、すべてのページでナビゲーションロジックとナビゲーションプレゼンテーションを複製する必要がないように、この「最初にロジックを実行してからプレゼンテーションを行う」ことをどのように行うことができるかということです。

MVCアプローチで物事を考えてください。最初にコントローラー (ロジック) を呼び出します。必要なものを把握します。データベースからのデータが必要な場合は、モデルを呼び出して要求します。次に、それをフォーマットし、他のデータを追加し、追加のクエリを実行してから、ビューに渡します。

于 2010-06-15T14:27:12.317 に答える
1

テンプレートエンジンのように聞こえます. 個人的にはsmartyがとても好きです。

(そしてその本を捨てる、それは...古いように聞こえます)

于 2010-06-15T14:26:08.600 に答える
1

MVC (モデル ビュー コントローラー) は、ニーズに合っているように思えます。あなたはそれについてここで読むことができます.

于 2010-06-15T14:27:48.333 に答える