2010-10-10 109 views
3

我是「面向對象」PHP的新手,但迄今爲止設法弄清了大部分內容。我正在建立一個網站,用戶可以註冊一個帳戶,然後在他們的個人資料上添加嗜好,比如說。OOPHP - 如何從數據庫行數組創建多個對象?

我已經設法找出創建類,對象,在數據庫中存儲單個用戶,並從數據庫中檢索單個用戶 - 從SQL返回的關聯數組中創建一個新對象「select 「查詢。

當我需要它從數據庫返回多行(記錄)時,我現在陷入困境。例如,用戶可能有7種興趣; SQL查詢將所有7行返回到關聯數組中(帶有字段,例如hobby_id,hobby_name,hobby_created),但是如何將這些行/業餘愛好記錄中的每一行都放入其自己的對象中?

我嘗試過搜索各種術語,但我不知道是否僅僅缺少我需要搜索的時髦詞彙。如果任何人都可以請讓我知道最好的方式去做這件事,我會永遠是偉大的。

非常感謝, 史蒂夫

+0

非常感謝大家的回覆 - 這讓我意識到,我可能只是創建一個滿足要求的對象數組,我以前沒有這樣想過。我還沒有使用PDO,暫時不想進入它(因爲我仍然在處理OO)。我已經創建了「業餘愛好」類,並完成了所有__construct,__get,__set等。 - 我製作了一個頁面,允許用戶逐一添加愛好......我只需要知道如何檢索要顯示在用戶個人資料頁面上的所有愛好。再次感謝大家! :) – SirMalius 2010-10-11 01:39:56

回答

1

當你有一系列興趣愛好時,在foreach中創建興趣對象。

$hobby = Array(); 
foreach ($query->results as $row) 
    $hobby = new Hobby($row['person_id'], $row['hobby']... 

或者可能是對象的散列。

+0

謝謝,我想我會給這個一個去看看我怎麼走。 – SirMalius 2010-10-11 01:43:20

+0

快速問題 - 不要使用上面的代碼,最後$ hobby是從數組中的最後一行派生的對象?肯定它會繼續迭代並用下一個對象覆蓋$愛好?或者「Array();」語法使PHP意識到每個新的Hobby對象都被添加到數組而不是替換? – SirMalius 2010-10-11 18:13:55

+0

我相信它需要添加到它。 – johnny 2010-10-11 19:16:13

0

首先你必須真正創建一個對象來處理這些愛好。你不能只在一些數據上撒上Acme OOP醬,並讓它神奇地變成一個物體。一個對象既是數據又是函數(方法,實際上)與這些數據一起工作。因此,首先找出你想讓你的代碼用這些數據位做什麼,然後從那裏開始工作。

0

是否有任何理由需要將愛好作爲自己的對象?它看起來像散列/數組一樣正常工作。然而,如果你真的想創建一個對象,那麼你可以創建一個業餘愛好類來存儲愛好名稱/創建日期,併爲他們設置獲取者。是否還有其他數據需要與業餘愛好相關聯,還是需要進行計算?如果是這樣,你可以創建Hobby類的方法來爲你做這個。

3

您可以遍歷結果並創建數據愛好或者如果你使用PDO你可以使用:

$stmt->fetchAll(PDO::FETCH_CLASS, 'Hobby'); 

這將創建一個業餘愛好類的每一行,並使用該列的屬性來自查詢。

http://www.php.net/manual/en/pdostatement.fetch.php

PDO :: FETCH_CLASS:返回所請求的類的新實例 , 映射結果的列設置 在類命名的屬性。如果 fetch_style包括 PDO :: FETCH_CLASSTYPE(例如 PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE)然後 類名稱被從第一塔的值 確定。

注意:如果你使用fetch()方法,而不是使用fetchall(),你必須調用取()

$stmt->setFetchMode(PDO::FETCH_CLASS, 'Hobby'); 
0

您可以輕鬆地強制轉換的關聯數組到對象之前,調用setFetchMode()屬性,如:

// $obj is instance of stdClass 
$obj = (object)array('hobby_name'=>'name'); 

問題當然不是爲你所需要的對象是明確的,或者如果他們需要任何明確的類(@ Galean的答案)。