2013-03-21 116 views
3

我想使用PDO創建對象的實例。我知道已經有很多questions,但我只發現可以向構造函數發送一個參數數組。對我來說,似乎構造函數只能接受一個數組作爲參數。但是,這會使構造函數不太有意義。如何使用PDO的FETCH_CLASS分配構造函數參數?

我要創造我自己的getter和setter一類是這樣的:

class MyClass { 
    private propertyA 
    private propertyB 

    public __constructor($argA, $argB) { 
     $this->setPropertyA($argA); 
     $this->setPropertyB($argB); 
    } 

    public setPropertyA($arg) { 
     $this->proprtyA = $arg; 
    } 
} 

是否有創建使用數據從數據庫這樣的類,最好使用PDO的一個實例的elgant方式。

+0

從SQL查詢中實例化類的想法違背了任何優雅。 – 2013-03-21 10:07:19

+0

我也conciderd創建存儲庫類並將數據從FETCH_ASSOC傳遞給我的模型類的構造函數。也許這更好? – 2013-03-21 10:14:14

+0

爲什麼要使用數據庫中的數據來創建對象?爲什麼??? – jdstankosky 2013-03-21 13:00:55

回答

1

Freeballin'在這裏:

$handle = new PDO("blahblahblah"); 
$statement = $handle->prepare("SELECT blahblah"); 
$statement->execute(); 
$object_params = $statement->fetch(PDO::FETCH_ASSOC); 

$object = new Object($object_params); 
// OR... 
$object = new Object($object_params["col_1"], $object_params["col_2"], "etc."); 

或者:

class MyClass { 
    private propertyA 
    private propertyB 

    public __constructor() { 
     $handle = new PDO("blahblahblah"); 
     $statement = $handle->prepare("SELECT blahblah"); 
     $statement->execute(); 
     $object_params = $statement->fetch(PDO::FETCH_ASSOC); 

     $this->setPropertyA($object_params[$argA_key]); 
     $this->setPropertyB($object_params[$argB_key]); 
    } 

    public setPropertyA($arg) { 
     $this->proprtyA = $arg; 
    } 
} 

我不知道你要找的內容完全一樣。你能評論嗎?

+0

你的第一個例子看起來不錯!我正在尋找替代FETCH_CLASS,因爲我不喜歡它如何處理屬性。 – 2013-03-22 16:17:01

+0

@GabrielSmoljár出於好奇,你不喜歡它如何處理屬性? FETCH_CLASS只是將列名稱與屬性名稱進行匹配,併爲每行創建一個對象數組。我不明白這有什麼不好? – jdstankosky 2013-03-22 17:09:36

+0

這是繞過我的習慣getters和setter的事實。 – 2013-03-22 19:28:16