2014-11-23 87 views
1

我有點難住。我從來沒有在PHP中使用過多的對象和類,但有人建議我重新做一些代碼。
我想要做的是使$拍賣對象屬性,同時保存所有的行數據。重新創建爲對象和類PHP

現在,我做echo $auctions[1]['title'];來回顯id = 1標題的列表。 我希望重新創建它,以便它成爲一個對象。

這裏是我當前的代碼,

$sqlquery = "SELECT * FROM auctions"; 
if ($result = $db->query($sqlquery)) { 
    while ($row = $result->fetch_assoc()) { 
     $auctions[$row['id']]['id'] = $row['id']; 
     $auctions[$row['id']]['title'] = $row['title']; 
     $auctions[$row['id']]['featured_image'] = $row['featured_image']; 
     $auctions[$row['id']]['description'] = $row['description']; 
     $auctions[$row['id']]['date'] = $row['date']; 
     $auctions[$row['id']]['location'] = $row['location']; 
     $auctions[$row['id']]['highlights'] = $row['highlights']; 
     $auctions[$row['id']]['catagories'] = $row['catagories']; 
     $auctions[$row['id']]['notes'] = $row['notes']; 
     $auctions[$row['id']]['terms'] = $row['terms']; 
     $auctions[$row['id']]['contact'] = $row['contact']; 
    } 
} 

我沒有對如何做到這一點的任何想法,但如果有人可以給我一點提示點我的方向,這將是非常讚賞! :)

+1

爲什麼不'$拍賣[$行[「身份證」] = $ row'? – 2014-11-23 18:19:18

+1

雖然你不知道什麼是類,但不要嘗試使用它。你不能從功能獲得一些利潤,你不能使用。瞭解,瞭解它是什麼,瞭解它爲什麼,然後使用。 – 2014-11-23 18:23:15

+0

你應該考慮使用[ORM](http://en.wikipedia.org/wiki/Object-relational_mapping)。 – Gumbo 2014-11-23 18:25:47

回答

1

我會在這裏寫一個最小的片段現價:

首先,讓我們爲我們的所有型號的基類:

abstract class Model() { 
    public $fields = array(); 
    private $data = array(); 
    public function setValues(array $vals) { 
    foreach($vals as $key=>$value) { 
     if (in_array($key, static::$fields)) { 
     $this->data[$key] = $value; 
     } 
    } 
    } 
    public function get($key) { 
     if (in_array($key, static::$fields) && isset($this->data[$key])) { 
     return $this->data[$key]; 
     } 
     return null; // or throw Exception) 
    } 
} 

接下來,創建一些具體的模型:

class Users extends Model { 
    public static $fields = array('id', 'name'); 
} 

我們現在可以使用它:

$users = array(); 
$sqlquery = "SELECT * FROM Users"; 
if ($result = $db->query($sqlquery)) { 
    while ($row = $result->fetch_assoc()) { 
     $user = new User(); 
     $user->setValues($row); 
     $users[] = $user; 
    } 
} 

你可以直接在用戶模型中添加一些用戶特定的方法(又稱登錄)。

你也應該實現其他型號的方法,如getByIdgetByQuerysave等,並沒有直接使用SQL查詢,因爲機型能夠做到這本身

+0

也要小心。在這個循環中創建模型不是推薦的,因爲它非常重要。夥計們通常會爲這種情況創建一個「集合」實體。它可以存儲數據列表,並通過模型遍歷它。 – 2014-11-23 19:58:33

0

您可以在對象存儲的值一樣

$obj = new stdClass; //create new standard class object 

$obj->id = $row['id']; //assign property value 
$obj->title = $row['title']; 
//further properties 

...等等

2

所有你上面列出所需的成員變量創建一個類auctions(如idtitle,​​等)。接下來在類內部創建一個setter方法(例如setValues()),該方法可以接受$row

$sqlquery = "SELECT * FROM auctions"; 
$auction = new Auctions(); 
if ($result = $db->query($sqlquery)) { 
    while ($row = $result->fetch_assoc()) { 

     $auction->setValues($row); 
     // do something with $auction... 
    } 
} 

除了明確的設置方法,您還可以使用神奇的方法__set()

0

你真的要創建對象(像這樣的東西包含的信息爲一個拍賣類型的實例組成的數組:

class Auction 
{ 
    var $id = null; 
    var $title = null; 
    var $featured_image = null; 
    var $description = null; 
    var $date = null; 
    var $location = null; 
    var $highlights = null; 
    var $catagories = null; 
    var $notes = null; 
    var $terms = null; 
    var $contact = null; 
} 

$sqlquery = "SELECT * FROM auctions"; 
if ($result = $db->query($sqlquery)) { 
    while ($row = $result->fetch_assoc()) { 
     $newAuction = new Auction(); 
     $newAuction->id = $row['id']; 
     $newAuction->title = $row['title']; 
     $newAuction->featured_image = $row['featured_image']; 
     $newAuction->description = $row['description']; 
     $newAuction->date = $row['date']; 
     $newAuction->location = $row['location']; 
     $newAuction->highlights = $row['highlights']; 
     $newAuction->catagories = $row['catagories']; 
     $newAuction->notes = $row['notes']; 
     $newAuction->terms = $row['terms']; 
     $newAuction->contact = $row['contact']; 
     $auctions[$row['id']] = $newAuction; 
    } 
} 

請注意,您有拼寫錯誤「類別」(你有「名作「)

+0

這班有什麼好處?你可以添加'setValues(array $ row)'方法嗎? – 2014-11-23 19:35:51

+0

@vp_arth我不知道我知道你在問什麼。 – 2014-11-23 19:39:25

+0

我問'是什麼讓這個對象與之前使用的數組有所不同?'' - >'而不是'[]'? – 2014-11-23 19:49:13

0

我建議你使用PDO

class Auction 
{ 
    public $id; 
    public $title; 
    public $featured_image; 
    public $description; 
    public $date; 
    public $location; 
    public $highlights; 
    public $catagories; 
    public $notes; 
    public $terms; 
    public $contact; 

    // This will return $all being an array of objects of class Auction 
    public static function getAll() { 
     $query = "SELECT * FROM auctions"; 

     $statement = $db->prepare($query); 
     if (!$statement->execute()) 
      return false; 
     $all = $statement->fetchAll(PDO::FETCH_CLASS, "Auction"); 
     return $all; 
    } 
}