ホームページ > php教程 > php手册 > スマートに構造化された PHP プログラムを作成する [翻訳済み]

スマートに構造化された PHP プログラムを作成する [翻訳済み]

WBOY
リリース: 2016-06-21 09:12:40
オリジナル
1208 人が閲覧しました

プログラム

スマートな構造の PHP プログラムを構築する

時間: 2000/10/19 09:06 著者: sharetop Oso.com



この記事はずっと書こうと思っていたのですが、時間がなくてなかなか書けませんでした。それを完成させてください。私はその方法を説明するためにここにいるのではなく、この記事が効果的で柔軟なネットワーク アプリケーションを構築する方法について議論するための単なる紹介になれば幸いです。

Web アプリケーション開発に携わって 2 ~ 3 年が経ち、Geocrawler 用に書いたコードを振り返ると、それが自分のものであるとは信じられなくなりました。 GPLのため、PHPBuilderのソースコードも混在しています。

最近、私は経験豊富な PHP 開発者として、SourceForge の作成を手伝っていますが、これが最終結果の範囲を示していると思います。優れたコードは、適切なライブラリと関数呼び出しを備えた複数の部分に分割され、サイトの各部分が他の部分から比較的独立している必要があります。

しかし、これはまだ最善ではありません。もしやり直せるとしたら、HTML 層をデータ層から分離することにもっと重点を置き、オブジェクトと明確な関数ライブラリを通じてこれを実現するでしょう。



美しいグラフィック

マネージャーが美しいグラフィックやグラフを使って説明することを好むのは私も知っています。それは私たちに最高の印象を残すでしょう。構造の背後に隠すというこのアイデアを使用すると、ロジックを外観から分離できます。これは、あらゆる複雑なプログラムを「API/データ アクセス レイヤー」で表現できることを意味します。

セキュリティチェックや更新された文章などをHTMLレイヤーに入れるのではなく、それらをまとめてAPIレイヤーに入れる方が良いでしょう。そして、この HTML レイヤーには、単純な関数呼び出しと返された配列、オブジェクト、その他のカスタム オブジェクト、およびデータベース検索結果のコレクションなどのみが含まれています。

これを行うと、最上層が非常に薄くなり、作成とメンテナンスが簡単になります。

次の例では、この HTML インターフェイスには、API レイヤーの一部の関数、一部の HTML ツール ライブラリ (ポップアップ ボックスなどを生成できる)、およびデータベース抽象化から呼び出されるいくつかのデータベース操作メソッドへの直接呼び出しのみがあります。レイヤー (特定のデータベースにバインドする必要はありません)。



基本

柔軟な PHP プログラム構造の最も基本的な側面は次のとおりです:

データベースの独立性
インターフェイスの独立性
移植性
オブジェクト指向、または少なくとも関数ライブラリで構成されている必要があります

その他 ?
もちろん他にもいくつかありますが、それらは大きすぎると思います。おそらく自分で指摘してもよいでしょう。


それぞれについて詳しく話しましょう。


1. データベースの独立性

サイトを作成するときは、サイトがどこで実行されるかわかりません。もちろん、サイトを大きくし、トラフィックを多くする必要があります。したがって、MS Access やその他の軽量データベース システムに縛られる必要はありません。さまざまなデータベース システムにすぐに接続することはできませんが、それらを簡単に切り替えることができる可能性があります。データベース呼び出しを抽象化するには、いくつかの異なるオプションがあります。 PHP の独特なアプローチは、PHP の異なるデータベースごとにアクセス関数が異なるため、異なるデータベース システムごとに異なるコードを記述する必要があることです。これを回避するには、PHPLib、PEAR の次のバージョン、および SourceForge で説明されているもののような、抽象データベース アクセス レイヤーを使用できます。


2. インターフェースの無関係

アプリケーションのテクノロジーとそれが実行されるサイトのどちらが重要ですか?本当のところは分かりません。私はこれを信じていませんでした - HTML は標準です。特に Web アプリケーションの場合、インターフェイスを変更すると、常に書き直す必要があります。ただし、アプリケーションが大規模で複雑な場合は、アクセス チェックやその他のコードをサイト プログラムのあらゆる場所にコピー アンド ペーストしたくない限り、データベース用に他のインターフェイスを確立する必要があります。これは、アプリケーションを正しく設計すれば、単純に小さな WAP インターフェイスを記述してデータベース アクセス オブジェクトを呼び出すだけで、サイトを簡単に書き換えることができることも意味します。しかし、プログラムを適切に設計しないと、HTML バージョンを WAP バージョンに変更するのは複雑なプロジェクトになります。

私はこのアイデアを SourceForge にも取り入れました。私たちのためにバグやタスクなどを送受信してくれる巨大なユーザーベースがあります。まず、私たちはこれらすべてが Web ページを通じてインターフェースされることを指摘しました。その後、Eric Raymond やその他の人々からの圧力により、データベースへの外部インターフェースに XML を使用することにしました。

幸いなことに、私たちは 4 月にプログラムのコアロジックコードをインターフェースから分離しました。私たちのやり方を説明してみます。あなたの仕事に役立つことを願っています。

SourceForge バグ トラッカーとその他のツールは、HTML ライブラリとデータ アクセス ライブラリの 2 つのライブラリに分かれています。このデータ アクセス ライブラリは、入力された値の正確性をチェックし、セキュリティ チェックを処理し、成功/失敗時に TRUE または FALSE を返します。

簡略化の理由により、この例は完全なオブジェクト パターンに基づいていないため、この基本クラスとその派生クラスなどについて説明する必要があります。この例が最も一般的なアイデアを提供すると思います。


HTML ライブラリの例


//データベースに接続します
require ("database.php");

//ヘッダー/フッター HTML などの一般的なユーティリティ
require ("html.php") ;

//データ アクセス ライブラリ
require ("bug_data.php");

echo site_header("ページ タイトル");

echo "

バグの更新


"

if (bug_data_update($field1,$field2,$field3)) {

echo "

更新に失敗しました!

";

} else {

echo "

更新されたバグ成功しました

";
//グローバル エラー文字列をエコーし​​ます
echo $フィードバック;
}

echo site_footer();

?>


データ アクセス ライブラリの例

/* *
*
* は、
* データベース内のバグを更新するためのアクセスを制御します。データを検証し、セキュリティをチェックします
* 成功した場合は true を返し、失敗した場合は false を返します
*
*/

function bug_data_update ($field1,$field2,$field3) {
//エラーを報告するためのグローバル文字列
global $フィードバック

//$field1 と $field2 は必須です
if (! $field1 || !$field2) {
$フィードバック="フィールド 1 とフィールド 2 は必須です";
return false;

//このユーザーに更新権限があることを確認します
if (!user_isadmin() ) {
$フィードバック="バグを更新するには管理者である必要があります";
return false;

//それではバグを更新しましょう

$result=db_query("UPDATE bug ".
"SET field2= '$ field2',".
"field3='$field3' ".
"WHERE id='$field1'");

//クエリの成功/失敗を確認します
if (!$result) {
//更新に失敗しました
return false;
} else {
return true;
}

?> 移植性

3. コードが 1 つの目的でのみ使用されることを望まないことは間違いありません。固定サイトの場合、将来的に色の選択、要素名、フォントなどを変更する可能性があるため、複数のページに含まれる構成ファイルをセットアップする必要があります。より良い見方は、サイトがモジュール式であり、HTML ファイルをコピー&ペーストする必要がないということです。私はこれらのファイルを関数に入れて、必要なときにいつでも呼び出すことが多いと思います。

同じアプローチをデータベースのパスワード、データベース接続文字列などにも使用でき、データベース処理のために抽象化レイヤーに入れることができます。


4. オブジェクト指向/関数型

COBOL で開発しているわけではないので、プロセスを複数の関数呼び出しに分割できることを意味します。各呼び出しは自動アクションであり、場合によっては他の関数の小さなセットを呼び出して結果を返すだけです。

良い例は、ユーザーがすべてのページでログインしているかどうかを確認することです。この機能を実行するには、Cookie を使用するかデータベースにクエリを実行できますが、確認システムを変更したい場合は、実際にはすべてのページを変更する必要があります。この変更は、関数ライブラリ内の通常の関数を変更することで実現できます。コードを作成するときは常に、それが複数の場所で使用される場合は、それをライブラリに入れることを検討する必要があります。


他には何がありますか?

もちろん、私が話していないことがたくさんあります。ご意見をお聞かせください。次回の投稿でお話します。特に、大規模で複雑なアプリケーションを作成した場合、どのように計画したか、別の方法でやり直した場合はどうなるかを聞きたいと考えています。

-------------------
著者: Tim Perdue
翻訳者: sharetop(ycshowtop@21cn.com)
出典: www.phpbuilder.net







関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート