2014-11-23 89 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; 
    } 
}