名前は「PHP ベスト プラクティス」ですが、主にプログラミング ルールではなく、PHP アプリケーションの合理的なアーキテクチャについて説明しています。
ロジックとデータを分離するアーキテクチャパターンを提供しており、MVCパターンの実践です。貴重な教材だと思いますので、ネット上に同様の記事があまりないので勉強しながら翻訳してみました。
私自身の理解に基づいて、MVC パターンの実装を要約しました (詳細な説明については翻訳を参照してください):
* ビューレイヤー (View): フロントエンド Web ページ;
* ロジック層 (コントローラー): まず、ページ ロジック (ページ コントローラー) がページ リクエストの処理を担当し、次にビジネス ロジック (ビジネス コントローラー) が呼び出されて特定の機能が実装されます。
* データ層(モデル):データベースにデータが格納され、その上にデータベース抽象化層があり、その上に「値オブジェクト」を生成する「データアクセスオブジェクト」(DAO)があります。ビジネス ロジックは、DAO を通じて値オブジェクトを操作します。========================================
PHP ベストプラクティス
原文: http://www.odi.ch/prog/design/php/guide.php
翻訳者: Ruan Yifeng
この記事では、PHP プログラミングにおける一般的な問題の解決策を示し、PHP アプリケーションのアーキテクチャについて簡単に説明します。
1.php.iniの設定
php.ini はインタープリタの動作を制御します。次の設定により、プログラムの移植性が最大限に確保されます。
i.short_open_tag
0 に設定すると、PHP の長いタグ形式が常に使用され、短いタグ形式は使用されません。
ii.asp_tags
ASP タグを使用しない場合は 0 に設定します。
iii.magic_quotes_gpc
$_GET、$_POST、$_COOKIE 変数を読み取る前に、この設定がオンになっているかどうかを確認する役割を持つグローバル ファイルをスクリプトに含めることをお勧めします。オンになっている場合は、これらにストリップスラッシュ関数を適用します。変数。 (注: この設定は PHP 5.3 では非推奨になりました。)
iv. register_globals
この設定に依存しないでください。GET、POST、COOKIE の値は常にグローバル変数 $_GET、$_POST、$_COOKIE を介して読み取られます。便宜上、$PHP_SELF = $_SERVER[PHP_SELF] を宣言することをお勧めします。
v. file_uploads
アップロードされるファイルの最大サイズは、次の設定によって決まります:
* file_uploads はアップロードが許可されることを意味する 1 (デフォルト値) に設定する必要があります。
*memory_limitはpost_max_sizeとupload_max_filesizeより少し大きくなければなりません。
* post_max_size と Upload_max_filesize は、アップロードのニーズを満たすのに十分な大きさでなければなりません。
2.設定ファイル
アプリケーションに関連するすべての設定をファイルに記述する必要があります。こうすることで、開発環境の変化に簡単に適応できます。構成ファイルには通常、データベース パラメータ、電子メール アドレス、さまざまなオプション、デバッグおよびログ出力スイッチ、アプリケーション定数などの情報が含まれています。
3. 名前空間
クラス名と関数名を選択するときは、名前が重複しないように細心の注意を払う必要があります。グローバル関数をクラスの外に配置しないようにしてください。クラスは、内部プロパティおよびメソッドの名前空間保護層に相当します。本当にグローバル関数を宣言する必要がある場合は、dao_factory()、db_getConnection()、text_parseDate() などのプレフィックスを使用します。
4. データベース抽象化レイヤー
PHP はデータベース操作のための一般的な関数を提供していません。各データベースには独自の関数セットがあります。これらの関数を直接使用しないでください。そうしないと、別のデータベース (MySQL から Oracle など) に切り替えたときに問題が発生します。さらに、データベース抽象化レイヤーは、通常、システム自体のデータベース機能よりも使いやすいです。
5.「バリューオブジェクト」(VO)
バリューオブジェクト(VO)は、形式的にはC言語の構造体のようなものです。これは、プロパティのみを含み、メソッドを含まない (またはメソッドがほとんど含まれない) クラスです。値オブジェクトはエンティティに対応します。通常、そのプロパティはデータベースのフィールド名と同じままにする必要があります。さらに、ID 属性が必要です。
クラス人 {
var $id, $first_name, $last_name, $email;
}
6. データアクセスオブジェクト(DAO)
データ アクセス オブジェクト (DAO) の役割は、主にデータベース アクセスを他のコードから分離することです。 DAO はスタックする必要があります。これは、将来データベース キャッシュを追加するのに役立ちます。各値オブジェクト クラスには独自の DAO が必要です。
クラス PERSONDAO {
var $conn;
関数 PersonDAO(&$conn) {
$this->conn =& $conn;
}
関数 save(&$vo) {
if ($v->id == 0) {
$this->insert($vo);
} 他 {
$this->update($vo);
}
}
関数get($id) {
#select文を実行する
#新しいvoを作成してgetFromResultを呼び出します
#リターンボ
}
関数delete(&$vo) {
#deleteステートメントを実行
#vo の ID を 0 に設定します
}
#-- プライベート関数
関数getFromResult(&vo, $result) {
データベース結果セットから #fill vo を入力します
}
関数更新(&$vo) {
#ここで更新ステートメントを実行します
}
関数挿入(&$vo) {
#idを生成(Oracleシーケンスから、または自動的に)
#データベースにレコードを挿入します
#voにIDを設定
}
}