なぜこの部分が使いにくいのか、あの部分も使いにくいのか、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 ページではありません。プロジェクト分析の特定の条件に従って分割された後の HTML
; ここでのデータベースには、データベースおよび他の部分とのインターフェイス プログラムが含まれます。通常、プログラムとデータベース
プログラムは 1 つのファイルに混在しますが、これらは次のように分離される必要があります。他のプログラムがデータを使用したい場合
ライブラリはこれらの関数を直接呼び出すことができますが、SQL ステートメントに直接アクセスすることはできません。
3. プロジェクト分析 - データ分析
プロジェクトが需要分析を受けた後、実際の開発の前の最初のステップはデータ分析です。データ分析とは、プロジェクトのプロセスで使用されるあらゆる種類のデータを
に積み上げ、それらをその特性に応じて分類し、個別に整理することです。 もちろん、それらの間にはさまざまな種類のデータが存在する可能性があります。このステップをしっかりと行うと、プロジェクト分析作業が順調にスタートするだけでなく、その後のプロジェクト構造分析やデータ処理プロセス分析にも非常に便利になります。
4. プロジェクト分析 - データの抽象化
データ分析後、いくつかの大まかなデータ モデルといくつかの基本データの小さなモデルを頭の中で組み合わせて大きなモデルを作成できるはずです。この場合、変更が必要なデータの保守用にデータベースを作成し、変更の必要のないデータについては定数を作成し、これらのデータ型に関連するクラスを抽象化し、データベース操作に関連するメソッドを確立します。 . >関係インターフェイス (関数形式、つまりメソッド)、データ、およびデータ関連の操作もいくつかの基本的なメソッドを抽象化できます。
プログラミングで呼び出すだけで済みます。
5. プロジェクト分析 – インターフェース分析
1 つまたは複数の製品を組み合わせる目的でデータを分析しました。製品を作りたいので、それを他の人に見せる必要があります。
そのため、引き続きインターフェイスを設計する必要があります。さまざまなインターフェイスを可能な限り包括的に検討した後、設計したインターフェイスをテンプレートにし、
対応する処理インターフェイス プログラムを作成します (したがって、プログラム、インターフェイスもデータの一種)で、プログラムを作成するときに使用されます。
6. プロジェクト分析 - プロセス設計
Web サイトのプログラムは非常にシンプルで、設計したさまざまなデータを呼び出すプロセスに従ってください。
7. ケース分析
ユーザー システム、次に最も単純な例であるユーザー システムを分析します。
1. データ分析では、最も単純なユーザー システムを分析するため、ここにはユーザー名
とパスワードの 2 つのデータしかありません。分析を続けると、番号も追加する必要があると考えられます。 (id) を各レコードに)、データが 3 つあるので、実際に追加する
は何もありません。
2. データの抽象化、データが 3 つだけのデータ モデル、その可能な操作方法を考えて、次のような手配をします。
データベース インターフェイス (savetodb()、getfromdb()、delete()) をそれぞれ用意します。また、データベースに出入りするデータの削除 (password()) も行います。また、ユーザーシステムの管理・閲覧を考慮し、データの収集タイプ(リスト)も用意します。
3.インターフェース分析、ログイン、検証成功、検証エラー、パスワード変更、パスワード変更成功、パスワード変更エラー、
へのユーザー登録、登録成功、登録エラー 管理-ユーザーリスト、管理-ユーザー情報閲覧。 、管理 - ユーザー
のパスワードを変更、管理 - ユーザーを削除。
4. サンプルコード
PHP コード:
コードをコピー
コードは次のとおりです。
include_once "include.php";
/*
** 目的: ユーザー システム データの抽象化
** 作成者: Yueレター
** 時刻: 2005-8-30 10:05
*/
class User {
var $id = 0;
var $Name = ""
var $Password = "";
var $db = "";
var $tpl = ""
/*
** 関数: コンストラクター、指定されたクラス データベース接続使用
** パラメータの説明: $tpl、表示テンプレート サービス ハンドル; $userdb、データベース接続
** 戻り値: なし
** 作成者: Yue Xinming
** 作成時間: 2005- 8-30 10:37
*/
function User($vtpl = "", $userdb = "") {
if ($vtpl == "") {
global $tpl; // 外部定義されたデータベース接続
$this->tpl =& $tpl;
} else {
tpl = $vtpl; }
if ($userdb == "") {
global $db; // 外部定義されたデータベース接続
$this->db =& $db;
} else {
$this-> ;db = $userdb; : true /false、成功/失敗
** 作成者: Yue Xinming
** 作成時刻: 2005-8-30 10:24
*/
function savetodb() {
if ($ this->Name == "") {
return false;
}
if ($this->id) {
$strSQL = sprintf("UPDATE user SET Name= '% s '、password ='%s '"$ this-> password、
$ this-> id
else {
$strSQL = sprintf("INSERT user (Name, Password) "
"VALUES ('%s', '%s')",
$this->Name,
, >query($strSQL)) {
return true;
} else {
return false; ; ** 戻り値: true/false、成功/失敗
**明
** 作成時刻: 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'",
$this->id
);
} else if ($this ->Name != "") {
$strSQL = sprintf("SELECT * FROM user WHERE Name='%s'",
$this->Name
);
} else {
return false;
}
$this->db- >query($strSQL);
if ($this->db->next_record()) { $ this-& gt; (ID ");else {
return false;
}
}
/*
** 機能: データベースからレコードを削除
** パラメータの説明: $id、レコード番号
** 戻り値: true/false、成功/失敗
** 作成者: Yue Xinming
** 作成時刻: 2005-8-30 10:47
*/
function delete( $id = 0) {
if (is_array($id)) { //複数のレコードを同時に削除
foreach($id as $i) {
$strSQL = sprintf("DELETE F ROM ユーザー WHERE id='%s'", $i);
} else if ($ ID) { $ Strsql = Sprintf ("ID = '%s' のユーザーから削除", $ ID) ;
} else if ($ this-& gt; id) {
$ strsql = sprintf ("DELETE FROM user WHERE id='%s'", $this->id); else { t; クエリ ($strSQL);
を返します。
/*
** 機能: ログインインターフェイスを表示します
** パラメータの説明: $placeholder、表示位置
** 戻り値: なし
** 作成者: Yue Xinming
** 作成時刻: 2005-8-30 11:00
*/
function showLogin($placeholder) {
$this->tpl->addBlockfile($placeholder, " user_showLogin ",
"tpl.user_showLogin.html"
"tpl.user_showLogin.html" );
$this->t pl->setCurrentBlock("user_showLogin");
$this- >tpl->setVariable (array("user_Logintitle" => "ユーザー ログイン", "strUsername" => "ユーザー名",
"strPassword" => "パスワード"
) 🎜> $ this->tpl->parseCurrentBlock("user_showLogin");プレースホルダー、表示位置
** 戻り値: true/false、成功/失敗
** 作成者: Yue Xinming
** 作成時間: 2005-8-30 11:12
*/
function getLogin($placeholder = "") {
if (isset($_POST["login"])) {
if ($ _POST ["username"] == ""){
if($ placeholder!= "")sur");
$this->getfromdb();
if ($this ->Password() == $_POST["password"]) {
trueを返す;プレースホルダー != " ") {
$this->tpl->setVarable($placeholder, "ログインに失敗しました!"); }
/*
** 機能: 登録インターフェースの表示
* * パラメータの説明: $placeholder、表示位置
** 戻り値: なし
** 作成者: Yue Xinming
** 作成時刻:2005-8-30 13:33
*/
function showRegister($placeholder) {
$this->tpl->addBlockfile($placeholder, "user_showRegister",
"tpl .user_showRegister.html"
... this->parseCurrentBlock ("user_shoRegister");
}
/*
** 機能:登録情報処理
** パラメータ説明:$placeholder、表示位置
** 戻り値:true /false、登録成功/登録失敗
** 作成者: Yue Xinming
** 作成時刻: 2005-8-30 15:49
*/
function getRegister ($placeholder = "") {
if (isset($_POST["register")) {
if ($_POST["username"] == "") { // ユーザー名の有効性チェック、他のチェック方法に変更可能
If ($placeholder != "") { // エラー メッセージ
$this->tpl->setVariable($placeholder, "ユーザー名は不正です!"); ) { // パスワードの有効性チェック
($ Placeholder! = "") {// エラー プロンプト
$ This-& GTL-& GT;矛盾しています!");
return false;
$strSQL = sprintf("SELECT COUNT(*) FROMユーザー 「
. 「WHERE Name='%s'」 ,
$this->名前
);
$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->db->query($strSQL);
return true;
else {
return false;
}
}
}// クラスの終わり ユーザー定義
/*
** 目的: ユーザー システム データ リストの抽象化
** 著者: Yue Xinming
** 時間: 2005-8-30 17: 21
*/
クラス UserList {
var $page = 0;
var $pagesize = 9; > var $Users = array();
var $c; var $db = ""
var $tpl = ""; * * 関数: コンストラクター、新しいクラスの作成時にいくつかの変数を初期化します
** パラメーターの説明: パラメーターなし
** 戻り値: なし
** 作成者: Yue Xinming
** 作成時刻: 2005-8-30 15:49
*/
function UserList($page = 1, $pagesize = 10,
$c, $vtpl = "", $vdb = "") {
$this->page = $page;
$this->pagesize = $pagesize;
$this->condition = $condition;
if ($vdb != " ") {
$this->db = $vdb;
} else {
グローバル $db;
$this->db = $db; } ($vtpl != "" ) {
$this->tpl = $vtpl;
} else {
$this->tpl = $tpl;
$strSQL = sprintf("SELECT COUNT(*) FROM user WHERE '%s'",
$this->condition
);
$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-> ;page * $this->pagesize,
$this->pagesize 1
);
$this->db->query($strSQL);
for ($i = 0; $this->db->next_record(); $i ) {
$this->Users[$i] = new User($this->tpl , $this->db);
$this->Users[$i]->id = $this->db->f("id");
$this->Users[$i]->Name = $this->db->f("Name");
$this->Users[$i]->Password = $this->db->f("パスワード");
}
}
/*
** 機能:リスト表示
** パラメータ説明:$placeholder、表示位置
** 戻り値:なし
** 作成者:Yue Xinming
** 作成時刻: 2005-8-31 9:16
*/
function showUserList($placeholder) {
$this->tpl->addBlockfile($placeholder) , "showUserList", "tpl.showUserList.html");
$this->tpl->setCurrentBlock("showUserList")
// ここに対応する処理コードを追加します
$this -> ;tpl->setVariable("strTitle", "ユーザーリスト");
$strTitles = array("ユーザー名", "操作");
$RecordOperations = array("パスワードのリセット" => " opera=passwd&id=,
の $this->tpl->setCurrentBlock("showRecordsTitle"); 🎜> $this->tpl->setVariable("strHead", $title);
$this-> ;tpl ->parseCurrentBlock("showRecordsTitle"); foreach ($ this->Users as $ user) {
$this->tpl->setCurrentBlock("showRecords");
$this->tpl->setCurrentBlock("showCell"); ->setVariable("strCell", $user); tpl->setCurrentBlock("showCell"); $this->tpl->setVariable("strOperation", $operation); id);
$this->tpl->parseCurrentBlock("showOperations");
$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" => $this->recordsum,
「intPage」 => ; $this->page,
"intPages" =>pages
)
);
$this->tpl->parseCurrentBlock("showPageInfo");
$this->tpl->parseCurrentBlock("showUserList");
}
}
?>
[Ctrl A 全选注:如需要取入外部Js必要刷新才能执行]