なぜこの部分が使いにくいのか、あの部分も使いにくいのか、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 を導入する必要がある場合は、実行するために更新する必要があります]

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,已经成为Web应用程序之间数据交换的常用格式。PHP的json_encode()函数可以将数组或对象转换为JSON字符串。本文将介绍如何使用PHP的json_encode()函数,包括语法、参数、返回值以及具体的示例。语法json_encode()函数的语法如下:st

楔子我们知道对象被创建,主要有两种方式,一种是通过Python/CAPI,另一种是通过调用类型对象。对于内置类型的实例对象而言,这两种方式都是支持的,比如列表,我们即可以通过[]创建,也可以通过list(),前者是Python/CAPI,后者是调用类型对象。但对于自定义类的实例对象而言,我们只能通过调用类型对象的方式来创建。而一个对象如果可以被调用,那么这个对象就是callable,否则就不是callable。而决定一个对象是不是callable,就取决于其对应的类型对象中是否定义了某个方法。如

使用Python的__contains__()函数定义对象的包含操作Python是一种简洁而强大的编程语言,提供了许多强大的功能来处理各种类型的数据。其中之一是通过定义__contains__()函数来实现对象的包含操作。本文将介绍如何使用__contains__()函数来定义对象的包含操作,并且给出一些示例代码。__contains__()函数是Pytho

标题:使用Python的__le__()函数定义两个对象的小于等于比较在Python中,我们可以通过使用特殊方法来定义对象之间的比较操作。其中之一就是__le__()函数,它用于定义小于等于比较。__le__()函数是Python中的一个魔法方法,并且是一种用于实现“小于等于”操作的特殊函数。当我们使用小于等于运算符(<=)比较两个对象时,Python

Javascript对象如何循环遍历?下面本篇文章给大家详细介绍5种JS对象遍历方法,并浅显对比一下这5种方法,希望对大家有所帮助!

Python中如何使用getattr()函数获取对象的属性值在Python编程中,我们经常会遇到需要获取对象属性值的情况。Python提供了一个内置函数getattr()来帮助我们实现这个目标。getattr()函数允许我们通过传递对象和属性名称作为参数来获取该对象的属性值。本文将详细介绍getattr()函数的用法,并提供实际的代码示例,以便更好地理解。g

使用Python的isinstance()函数判断对象是否属于某个类在Python中,我们经常需要判断一个对象是否属于某个特定的类。为了方便地进行类别判断,Python提供了一个内置函数isinstance()。本文将介绍isinstance()函数的用法,并提供代码示例。isinstance()函数可以判断一个对象是否属于指定的类或类的派生类。它的语法如下

Python中如何使用__add__()函数定义两个对象的加法运算在Python中,可以通过重载运算符来为自定义的对象添加对应的运算功能。__add__()函数是用于定义两个对象的加法运算的特殊方法之一。在本文中,我们将学习如何使用__add__()函数来实现对象的加法运算。在Python中,可以通过定义一个类来创建自定义的对象。假设我们有一个叫做"Vect


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック



