ホームページ  >  記事  >  バックエンド開発  >  オブジェクト指向 PHP 開発モデルに関する優れた記事 (短縮版)_PHP チュートリアル

オブジェクト指向 PHP 開発モデルに関する優れた記事 (短縮版)_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:56:561028ブラウズ

なぜこの部分が使いにくいのか、あの部分も使いにくいのか、PHP を批判している人を見かけました。実際、厳密に言えば、使いやすい言語はなく、厳格な標準を備えた言語もありません。使用する前に、これらの標準が完成するまで待つことはできません。どの言語を使っても、プログラマーは自分自身に頼ってプログラムを書く必要があると思います。最近少しずつ情報を整理して発信していきますので、皆様のご意見、ご支援をよろしくお願いいたします

==================== ========= ===========
オブジェクト指向 PHP 開発モデル (改善予定...)
============== ========== ===============

1. 環境
サーバー: Linux (Apache 2.x、MySQL4.1.x、PHP4、Perl、 SHELL、CVS、Sambar) クライアント: Windows (Ie6、UltraEdit、その他の補助ツール)
テストマシン: windows98/2K/xp/Linux (Ie5、Ie6、mozilla、firefox)

2 番目、Web ページ、プログラムの 3 層、データベース
いわゆる Web ページは通常の静的な Web ページではありません。ここでの Web ページは、プロジェクト分析の特定の状況に応じて分割され、HTML テンプレートに作成されます。ここでのデータベースには、データベースと他のプログラムとのインターフェイス プログラムが含まれます。通常、プログラムとデータベース プログラムは 1 つのファイルに混在できますが、他のプログラムがデータベースを使用してこれらの関数を直接呼び出す場合は、SQL ステートメントに直接触れることができないため、これらを関数の形でできるだけ分離する必要があります。 。

3. プロジェクト分析 - データ分析
プロジェクトがニーズ分析を受けた後、実際の開発の前に行うべき最初のステップはデータ分析です。データ分析とは、プロジェクトのプロセスで使用されるあらゆる種類のデータを
その特性に応じて分類し、それらを個別に整理することです。もちろん、それらの間にはさまざまな関係性が存在する可能性があります。このステップをしっかりと行うと、プロジェクト分析作業が順調にスタートするだけでなく、その後のプロジェクト構造分析やデータ処理プロセス分析にも非常に便利になります。

4. プロジェクト分析 - データの抽象化
データ分析後、いくつかの大まかなデータ モデルといくつかの基本的な小さなデータ モデルで構成される大規模なモデルが頭の中にできるはずです。通常の状況では、必要な変更をいくつか加えます。変更する必要のないデータを維持するためのデータベースを作成し、変更する必要のないデータからいくつかの定数を作成し、これらのデータ型に関連するクラスを抽象化し、関連するインターフェイス (関数形式) を確立します。 、メソッド) データベース操作用 データ データに関連付けられた操作は、いくつかの基本メソッドを抽象化することもできます。
それらをプログラミングで呼び出すだけで済みます。

5. プロジェクト分析 – インターフェース分析
1つまたは複数の製品を組み合わせる目的でデータを分析しました。製品を作りたいので、それを他の人に見せる必要があります。
そのため、引き続きインターフェースを設計する必要があります。さまざまなインターフェースを可能な限り包括的に検討した後、設計したインターフェースをテンプレートにし、対応する処理インターフェースプログラムを作成します(つまり、プログラムの観点から見ると、インターフェースはもデータの一種です)、プログラムを書くときに使用されます。

6. プロジェクト分析 - プロセス設計
ウェブサイトのプログラムは非常にシンプルで、プロセスに従い、設計したさまざまなデータを呼び出すだけです。

7. 事例分析
ユーザーシステム、今度は最も単純な例であるユーザーシステムを分析します。
1. データ分析では、最も単純なユーザーシステムを分析するため、ここにはユーザー名
とパスワードの 2 つのデータしかありません。分析を続けると、それに番号 (id) を追加する必要があると考えられます。各レコードには 3 つのデータがあり、これ以上追加できるものはありません。
2. データの抽象化、3つのデータだけを持つデータモデル。その可能な操作方法を考えて、データの保存とそこにそれぞれ
Databaseインターフェース(savetodb()、getfromdb()、delete())を用意します。ライブラリを終了するときにも削除されます (password())。また、ユーザーシステムの管理・閲覧を考慮し、データの収集タイプ(リスト)も用意します。
3. インターフェース分析、ログイン、検証成功、検証エラー、パスワード変更、パスワード変更成功、パスワード変更エラー、
アカウントへの登録、登録成功、登録エラー 管理 - ユーザーリスト、管理 - ユーザー情報表示、管理 --ユーザー
パスワードの変更、管理 -- ユーザーの削除。
4. サンプルコード
PHPコード:



コードをコピー

コードは以下の通りです:




include_once "include.php";
/*
** 目的: ユーザーシステムデータの抽象化
** 著者: Yue Xinming
** 時間: 2005-8-30 10:05
* /
var $id = 0;
var $Password = "";
var $tpl = ""; ** 関数: コンストラクター、クラスによって使用されるデータベース接続を指定します
** パラメーターの説明: $tpl、表示テンプレート サービス ハンドル; $userdb、データベース接続
** 戻り値: なし
** 作成者: Yue Xinming
* *作成時刻: 2005-8-30 10:37
*/
function User($vtpl = "", $userdb = "") {
if ($vtpl == "") {
global $tpl ;定義されたデータベース接続
$this->tpl if ($userdb == "") {
global $db; / 外部定義データベース接続

/*
** 機能: データをデータベースに保存します
** パラメータの説明:パラメーターなし
**返品値:true/false、success/failth **著者:yue xinming
**作成時間:2005-8-30 10:24 "UPDATE user SET Name='%s' 、Password='%s' " "WHERE $this->パスワード, }else {
$strSQL = sprintf("INSERT user (名前, パスワード) , $this->名前,
; se;入手データベースからのレコード
** パラメーターの説明: $id、レコード番号
** 戻り値: true/false、成功/失敗
** 作成者: Yue Xinming
** 作成時刻: 2005-8-30 10:32
*/
function getfromdb($id = 0) {
if ($id) {
$ strSQL = sprintf("SELECT * FROM user WHERE id='%s'", $id);
} else if ($ this->id) {
$strSQL = sprintf("SELECT * FROM user WHERE id=' %s'", ); "") { $strSQL = sprintf("SELECT * FROM ユーザー); db->query($strSQL);
if ($this->db->next_record()) {
$this->id = $this->db->f("id")
$this->名前 ;
trueを返します。else {
false;戻り値: true/false、成功/失敗
** 作成者: Yue Xinming
** 作成時刻: 2005-8-30 10:47
*/使う 使う 使う 使う アウト アウト アウト アウト「s」の '' '' 'sut — ‐ ‐ ‐ ‐ ‐ reは、> query($ strsql)を記録します->id) {
$strSQL = sprintf("DELETE FROM user WHERE id='%s'", $this->id);
$this->db->query( $strSQL);

/*
** 関数: ログインインターフェイスを表示します
** パラメータの説明: $placeholder、表示位置
** 戻り値: なし
** 作成者: Yue Xinming
** 作成時刻: 2005-8-30 11 :00
*/
function showLogin($placeholder) {
$this->tpl->addBlockfile($placeholder, "user_showLogin",
"tpl.user_showLogin.html"
tpl->setCurrentBlock("user_showLogin" );
「strUsername」=>、
strPassword" => "パスワード"
tpl->parseCurrentBlock("user_showLogin")
}

/*
** 関数: ログイン情報を処理します
* * パラメータの説明 : $placeholder、表示位置
** 戻り値 : true/false、成功/失敗
** 作成者: Yue Xinming
** 作成時刻: 2005-8-30 11:12
*/
function getLogin( $placeholder = "") {
$this ->tpl->setVarable($placeholder, "ユーザー名を空にすることはできません!");
$this->getfromdb(); $_POST["パスワード"]) {
$this->tpl->setVarable($placeholder, "ログインに失敗しました!" ; , 表示位置
** Return値:なし
**著者:yue xinming
**作成時間:2005-8-30 13:33
** 関数: 登録情報の処理
** パラメータの説明: $placeholder、表示位置
** 戻り値: true/false、登録成功/登録失敗
** 著者: Yue Xinming
** 作成時間: 2005-8 -30 15:49
*/
function getRegister($placeholder = "") {
if (isset($_POST["register")) {
if ($_POST["username"] == "") { / / ユーザー名の正当性チェック、他のチェック方法に変更可能
この名前は違法です。");
//パスワードの合法性チェック
/エラープロンプトT $ this-> tpl-> setVariable($ Placeholder、" 2つの入力パスワードは一貫していません!");
}
false; $this->db->query($strSQL);
$this->db->next_record();
if ($this->db->f("COUNT(*)") > 0) {
return false;
else {
$strSQL = sprintf("INSERT INTO user (名前, パスワード) "
. "VALUES('%s', '%s')",
$this- >名前、
$this->パスワード
$this-& gt;db->query($strSQL);
return true;
} else {

}
}
}//クラスの終わり ユーザー定義

/*
** 目的: ユーザー システム データ リストの抽象化
** 著者: Yue Xinming
** 時間: 2005-8-30 17:21
*/
class UserList {
var $ ページ = 0;
var $pagesize = 0;
var $db == ";
var $tpl = "";

/*
** 関数: コンストラクター、新しいクラスの作成時にいくつかの変数を初期化します
** パラメーターの説明: パラメーターなし
** 戻り値: なし
** 著者: Yue Xinming
** 作成時刻: 2005-8-30 15:49
*/
function UserList($page = 1, $pagesize = 10,
db = "") {
$this->page = $page;
$ this->pagesize = $pagesize;
$this->condition = $condition;
if ($vdb != "") {
$this->db = $vdb } else {
!= " ") {
$this->tpl = $vtpl; else {
$this->tpl = $tpl; 

$strSQL = sprintf("SELECT COUNT(*) FROM user WHERE '%s'",
$this->条件
); 
$this->db->query($strSQL); 
$this->db->next_record(); 
$this->recordsum = $this->db->f("COUNT(*)"); 

$this->pages = ceil($this->>recordsum / $this->pagesize); 

$strSQL = sprintf("SELECT * FROM user WHERE '%s' LIMIT '%s', '%s'",
$this->condition,
$this->ページ * $this->ページサイズ、
$this->pagesize + 1
); 
$this->db->query($strSQL); 
for ($i = 0; $this->db->next_record(); $i ++) {
$this->Users[$i] = new User($this->tpl, $これ->db); 
$this->Users[$i]->id = $this->db->f("id"); 
$this->Users[$i]->Name = $this->db->f("Name"); 
$this->ユーザー[$i]->パスワード = $this->db->f("パスワード"); 
}
}


/*
** 関数: リストの表示
** パラメータの説明: $placeholder、表示位置
** 戻り値: なし
** 作成者: Yue Xinming
** 作成時刻: 2005-8-31 9: 16
*/
関数 showuserList ($ Placeholder) {
$ this-& gt; addBlockfile ($ Placeholder, "Showuserlist", "TPL.ShowuserList.h tml "); TPL- & gt; setcurrentblock ("showuserlist"); // 対応する処理コードをここに追加します
$ This- & GTL- & GT; ("ユーザー名") "," 操作 "); 作 $ RecordOperations = Array (" パスワードのリセット "= & GT;" 操作 = PASSWD & ID = ",
" 削除する "= & gt;" 操作 = 削除 & id = "
); (Foreach ($ StrTitles As $ Title) {
$ This-& GT; TPL-& GT; SetcurrentBlock ("SHOWRECORDSTITLE"); Trhead ", $ Title);
$ This ->tpl->parseCurrentBlock("showRecordsTitle ");
foreach ($this->$user としてのユーザー) {
$this->tpl->setCurrentBlock("showRecords");
$this->tpl ->setCurrentBlock("showCell") ; $&gt> , $_SERVER["REQUEST_URI"] . $user->id) 
$this->tpl->parseCurrentBlock("showCell"); 
$this->tpl->parseCurrentBlock("showRecords"); 
}
} else { // 無记录
$this->tpl->setCurrentBlock("showRecords"); 
$this->tpl->setCurrentBlock("showCell"); 
$this->tpl->setVariable("strCell", "無记录"); 
$this->tpl->parseCurrentBlock("showCell"); 
$this->tpl->setCurrentBlock("showCell"); 
$this->tpl->setVariable("strCell", " "); 
$this->tpl->parseCurrentBlock("showCell"); 
$this->tpl->parseCurrentBlock("showRecords"); 
}
$this->tpl->setCurrentBlock("showPageInfo"); 
$this->tpl->setVariable(array("intColspan" => "2",
"intRecordSum" =>gt; $this->recordsum,
"intPage" => $this->ページ、
"intPages" => $this->pages
)
); 
$this->tpl->parseCurrentBlock("showPageInfo"); 
$this->tpl->parseCurrentBlock("showUserList"); 
}
}
?>  

HTML 代コード:

[Ctrl+A ですべて選択 注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります]

www.bkjia.com本当http://www.bkjia.com/PHPjc/317998.html技術記事なぜこの部分が使いにくいのか、あの部分も使いにくいのか、PHP を批判している人を見かけました。実際、厳密に言えば、使いやすい言語はなく、厳格な基準を持った言語もありません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。