在這一節中,我們將殺害二鳥一石。不僅我們將學習如何將面向對象的PHP和MySQL ,但是我們將學習如何組對象。在這種情況下,你將建立一個一流的UsersGroup其中將包含一系列的用戶對象。每個用戶對象將建立連續使用從MySQL查詢。要嘗試這個實際例子,您首先需要建立一個用戶表在MySQL數據庫。我使用的是MySQL數據庫命名為' kirupa_oop ` 。使用下面的查詢創建表並插入樣本數據。
/* Create Users table */
CREATE TABLE `users` (
`user_id` INT NOT NULL AUTO_INCREMENT,
`user_name` TEXT NOT NULL,
PRIMARY KEY (`user_id`)
);
/* Insert sample data into Users table */
INSERT INTO `users`
( `user_id`, `user_name` )
VALUES
( '', 'kirupa' ),
( '', 'bwh2' );
這非常簡單的表格只是有兩個欄目: ` user_id '和'用戶名' 。您不妨添加自己的名稱,此表為香料的事情了。
如所承諾的那樣,我們將創造一個UsersGroup類。該工作組將包含一系列的用戶對象,其中每一項創建使用數據從我們的MySQL的表。我所有的表格上的數據庫名為` kirupa_oop ` 。如果您的數據庫沒有名為' kirupa_oop ' ,您必須更改數據庫名稱中的設置階級所示。這裡是我們的UsersGroup階級的行動:
$group = new UsersGroup;
/* loop through our group, echo user names */
foreach( $group->getUsers() as $user ) {
echo $user->getName().'<br />';
}
/* User class, same as before */
class User {
private $name;
function __construct( $attribs ) {
$this->name = $attribs['name'];
}
/* name methods */
function setName( $val ) {
$this->name = $val;
return;
}
function getName() {
return $this->name;
}
}
/* Contains a group of User objects */
class UsersGroup {
private $name; // name of group
private $group = array(); // group of User objects
function __construct() {
/* Connect to DB using Settings */
$link = mysql_connect(
Settings::$DATABASE['host'],
Settings::$DATABASE['username'],
Settings::$DATABASE['password']
);
mysql_select_db ( Settings::$DATABASE['database'], $link );
/* Get table names from Settings class */
$tbl_users = Settings::$TABLES['tbl_users'];
/* Query */
$sql = "SELECT user_id AS ID,
user_name AS name
FROM $tbl_users";
$result = mysql_query( $sql ) or die(mysql_error());
/* Adds user to group with each row of data */
while( $row = mysql_fetch_array($result) ) {
$this->addUser( $row );
}
}
/*
Add a user to Group
Does simple check to see if we pass an array (like $attribs)
or if we pass an object (like a User object)
*/
function addUser( $user ) {
if( is_object( $user ) ) {
array_push( $this->group, $user );
}
if( is_array( $user ) ) {
$noob = new User( $user );
array_push( $this->group, $noob );
}
return;
}
/* Returns the group (which is an array) */
function getUsers() {
return $this->group;
}
}
/* Holds our site settings */
class Settings {
static $DATABASE = array(
// change these as needed 'database' => 'kirupa
首先要說明的是,我們舉辦我們的數據庫連接和資料表名稱在我國設置一流的,在靜態變量。如果我們需要改變我們的數據庫名稱,表名稱,數據庫用戶名,等等,我們將只能做,我們設置一流的(這是最好在一個單獨的,包括檔案) 。我們的用戶級是什麼新鮮事-它不僅擁有財產的名稱,仍然獲得了一系列數據經由_ _construct。
讓我們來看看的代碼UsersGroup類。如果您已經連接到MySQL數據庫與PHP之前,連接應該是什麼新鮮事。唯一不同的是,我們使用靜態變量為我們的連接設置。我們這樣做對我們的名字,因為表內的雙引號,我們的設置一流的靜態變量不能被解析。也就是說,只有使用設置: : $表[ ' tbl_users ' ]直接在我們的雙引號SQL查詢將導致一個錯誤。
我們的SQL查詢產生了一系列行,我們指定為結果。使用while循環,我們通過我們的$結果陣列。每個元素美元的結果是一系列的價值觀(如編號和名稱) 。同樣,這看起來應該很熟悉的人誰使用PHP來訪問MySQL數據庫。現在的面向對象的一部分:我們然後通過每一行(列)從我們的MySQL查詢我們addUser方法。首先, addUser方法檢查,如果被通過一系列的數據(如$行)或整個用戶對象。在這種情況下,我們正通過一系列的數據。使用該陣列的數據, addUser創建一個用戶對象( $ noob ) ,然後補充說,用戶對象的組陣列( $組) 。
注意對列名:當我們的用戶目標是建立一系列的數據,構造是尋找所謂的數組元素的名稱。為了滿足這一要求,我們使用SQL別名,可以看到美元的數據庫。如果我們沒有別名用戶名姓名美元的連續變量將不會舉行所謂的數組元素的名稱,而是用戶名。因此,它不會正確填入變量的名稱在我們的用戶對象。我寧願讓我定制的SQL ,而不是我的PHP類方法,因為我更可能重用的PHP類方法比SQL查詢。舉例來說,如果我創建一個狗類,我也希望getName方法和構造。而不是修改幾個PHP的方法,以支持而不是狗的用戶,我寧願修改一個SQL查詢。另外,您也可以重新命名您的用戶名欄,只是名稱。這將最大限度地重用,但可能會傷害你的能力理解更復雜的SQL查詢和數據庫設計。
您可能會考慮這一類是過於復雜。畢竟,您可能代碼所有這一切都在15行內經常PHP頁面。因此,哪裡的優勢?好吧,看我們如何利用我們的對象:
/* instantiate group */
$group = new UsersGroup;
/* loop through our group, echo user names */
foreach( $group->getUsers as $user ) {
echo $user->getName().'<br />';
}