2011-05-25 33 views
1

我需要經驗豐富的開發人員對此提供建議。讓我直接進入它。用於演示文檔的php類結構

我有用戶發表文章,我需要顯示文章列表並顯示發佈他們的用戶。

在我CURENT precedural其方法是這樣的:

$result = mysql_getresult("SELECT users.*, articles.* 
          FROM users JOIN articles ON users.id = articles.user_id 
          WHERE 1"); 
while($row = mysql_getrow($result)) { 
    display_username($row); 
    display_articletitle($row); 
} 

現在我想用OO做OO方法

class User { 
    protected $data; 

    public function loadUserData($id) { $this->data = mysql_readstuff() } 
    public function displayUserName() { echo $this->data['name'] } 
} 


class Article { 
    protected $data; 

    public function loadArticleData($id) { $this->data = mysql_readstuff() } 
    public function displayArticleTitle() { echo $this->data['title'] } 
} 

問題:

1)這些類具有他們自己的方法加載他們自己的數據(和其他許多方法),所以快速mysql查詢一次獲取所有數據與JOIN在這裏並不真正起作用。加載他們自己的數據對於許多其他方法(例如認證)來說很好。

2.)我想分開演示文稿(使用savant3 templater),所以我應該把顯示方法放在哪裏?我需要展示許多東西(工作,評論等),我不認爲在templater中爲他們每個人製作一個方法是一個好主意。

這個例子是與用戶和文章,但我會有用戶+評論,用戶+工作+要求。

我想讓顯示方法是靜態的,並讓它們取一個參數,但後來它與程序方法沒什麼兩樣。或者創建一個setData($ row)方法,將$ data設置爲它獲得的參數。

這個問題可能有一個共同的解決方案。

任何意見表示讚賞。

謝謝 Skaccer

回答

1

一篇文章類不應該有一個load方法,或顯示方法。

我的建議是建立一個table gateway

Class ArticleGateway { 

    getArticles(){} // returns an array of article objects 
    getArticlesByAuthor(Author $author) {} 

} 

$articleGateway = new ArticleGateway() {} 
$articles = $articleGateway->getArticles(); 

現在$articles包含文章對象的數組。您可以在視圖中遍歷它並顯示文章。

+0

謝謝!我會考慮一下(我自己的項目),然後回覆你。我需要能夠處理分頁結果,排序結果,全文搜索和非全文搜索結果的內容,並且很快將獅身人面像添加爲搜索引擎。它也需要計算結果。 [這裏是當前頁面的鏈接](http://www.networkdance.com/dance-ballet-auditions) - 點擊右側的「詳細搜索」。它需要發生在多個頁面上...... – Skaccer 2011-05-26 12:37:14

0

正是因爲@galen說,

不要讓你的類中的方法打印出你的數據,讓他們返回數據的數組,然後你處理它們,因爲你需要查看它們:

我的經驗這在開發我的應用程序時。我可以使用我的方法加載Android應用程序數據以及網站應用程序