このセクションでは、一石二鳥になります。オブジェクト指向の PHP と MySQL を組み合わせる方法だけでなく、オブジェクトをグループ化する方法も学びます。この場合、一連の User オブジェクトを含むファーストクラスの UsersGroup を作成します。各ユーザー オブジェクトは、MySQL からのクエリを使用して継続的に構築されます。この実用的な例を試すには、まず MySQL データベースに users テーブルを作成する必要があります。私は「kirupa_oop」という名前の MySQL データベースを使用しています。以下のクエリを使用してテーブルを作成し、サンプル データを挿入します。
/* ユーザーテーブルを作成 */
CREATE TABLE `users` (
`user_id` INT NOT NULL AUTO_INCREMENT、
`user_name` テキストが NULL ではありません、
主キー (`user_id`)
);
/* サンプル データを Users テーブルに挿入します */
「users」に挿入します
(`user_id`, `user_name` )
価値観
( '、'キルパ' )、
( '', 'bwh2' );
これは、「user_id」と「username」の 2 つの列だけを持つ非常に単純なテーブルです。スパイスに関するこの表に自分の名前を追加することもできます。
約束どおり、UsersGroup クラスを作成します。ワークグループには一連の User オブジェクトが含まれており、それぞれのオブジェクトは MySQL テーブルのデータを使用して作成されます。私のすべてのテーブルのデータベース名は「kirupa_oop」です。データベースの名前が「kirupa_oop」でない場合は、設定クラスでデータベース名を次のように変更する必要があります。これが実際の UsersGroup クラスです:
$group = 新しいユーザーグループ;
/* グループをループし、ユーザー名をエコーします */
foreach( $group->getUsers() as $user ) {
echo $user->getName().'
';
}
/* ユーザークラス、前と同じ */
クラス ユーザー {
プライベート $name;
関数 __construct( $attribs ) {
$this->name = $attribs['name'];
}
/* メソッドに名前を付ける */
関数 setName( $val ) {
$this->name = $val;
戻ります;
}
関数 getName() {
$this->name;
を返します
}
}
/* User オブジェクトのグループが含まれます */
クラス UsersGroup {
private $name // グループの名前
private $group = array() // ユーザーオブジェクトのグループ
;
関数 __construct() {
/* 設定を使用して DB に接続します */
$link = mysql_connect(
設定::$DATABASE['ホスト'],
設定::$DATABASE['ユーザー名'],
設定::$DATABASE['パスワード']
);
mysql_select_db (設定::$DATABASE['データベース'], $link );
/* 設定クラスからテーブル名を取得 */
$tbl_users = 設定::$TABLES['tbl_users'];
/* クエリ */
$sql = "IDとしてuser_idを選択,
User_name AS 名
$tbl_users から";
$result = mysql_query( $sql ) または die(mysql_error());
/* データの各行を含むグループにユーザーを追加します */
while( $row = mysql_fetch_array($result) ) {
$this->addUser( $row );
}
}
/*
ユーザーをグループに追加します
配列 ($attribs など) を渡すかどうかを簡単にチェックします
またはオブジェクト (User オブジェクトなど) を渡す場合
*/
関数 addUser( $user ) {
if( is_object( $user ) ) {
array_push( $this->group, $user );
}
if( is_array( $user ) ) {
$noob = 新しいユーザー( $user );
array_push( $this->group, $noob );
}
戻ります;
}
/* グループ (配列) を返します */
関数 getUsers() {
$this->group;
を返す
}
}
/* サイト設定を保持します */
クラス設定 {
静的 $DATABASE = 配列(
// 必要に応じて変更します 'database' => 'kirupa
最初に注意すべきことは、データベース接続とテーブル名を設定クラスの静的変数に保持していることです。データベース名、テーブル名、データベース ユーザー名などを変更する必要がある場合、設定した最初のクラスでのみ変更できます (別個のインクルード ファイルで行うのが最適です)。ユーザー レベルの新機能 - プロパティの名前を持っているだけでなく、_construct 経由で大量のデータを取得できるようになりました。
UsersGroup クラスのコードを見てみましょう。以前に PHP を使用して MySQL データベースに接続したことがある場合、その接続は新しいものではありません。唯一の違いは、接続設定に静的変数を使用することです。これを行うのは、名前の中に二重引用符があり、設定されたクラスの静的変数を解析できないためです。つまり、二重引用符で囲まれた SQL クエリで設定:$tables['tbl_users'] を直接使用した場合のみ、エラーが発生します。
SQL クエリは一連の行を生成し、結果として指定します。 while ループを使用して、$result 配列を渡します。 $結果の各要素は一連の値です(例: 番号と名前)。繰り返しますが、これは、PHP を使用して MySQL データベースにアクセスする人にとってはおなじみのはずです。次に、オブジェクト指向の部分です。次に、MySQL クエリの各行 (列) を addUser メソッドに渡します。まず、addUser メソッドは、一連のデータ ($rows など) またはユーザー オブジェクト全体が渡されたかどうかを確認します。この場合、一連のデータを調べます。 addUser は配列データを使用してユーザー オブジェクト ($noob) を作成し、そのユーザー オブジェクトをグループ配列 ($group) に追加します。
列名に注意してください: ユーザーの目的がデータの配列を作成することである場合、コンストラクターはいわゆる配列要素の名前を探します。この要件を満たすために、USD データベースを参照できる SQL エイリアスを使用します。ユーザー名にエイリアスを付けなかった場合、$name 連続変数には、呼び出された配列要素の名前が保持されず、代わりにユーザー名が保持されます。したがって、ユーザー オブジェクトに変数名が正しく設定されません。 SQL クエリよりも PHP クラス メソッドを再利用する可能性が高いため、PHP クラス メソッドではなくカスタム SQL を使用したいと考えています。たとえば、犬のクラスを作成する場合は、getName メソッドとコンストラクターも必要になります。犬ユーザーの代わりにサポートするためにいくつかの PHP メソッドを変更するよりも、SQL クエリを変更したいと思います。あるいは、ユーザー名フィールドの名前を名前のみに変更することもできます。これにより再利用が最大限に可能になりますが、より複雑な SQL クエリやデータベース設計を理解する能力が損なわれる可能性があります。
このカテゴリは複雑すぎると思われるかもしれません。結局のところ、これらすべてを通常の PHP ページの 15 行以内にコーディングできるでしょう。それで、どこに利点があるのでしょうか?さて、オブジェクトをどのように利用するかを見てください:
/* グループをインスタンス化 */
$group = 新しいユーザーグループ;
/* グループをループし、ユーザー名をエコーします */
foreach( $group->getUsers as $user ) {
echo $user->getName().'
';
}