2011-11-29 9 views
1

我是OOP的新手,已經撰寫了一個產品類。所有工作都很好,但我不確定下面哪個版本的這個方法是最好的?OOP php方法 - 將變量傳入或從對象內部獲取

第一個從對象中獲取變量,第二個將變量傳遞到類中。兩者都有效。我原本是把它作爲第一個版本,但事情似乎運行緩慢,然後將其改爲第二版。

public function getProductURLstart(){ 

    $select = "SELECT l.URL, p.id FROM logins AS l 
    INNER JOIN Pages AS p ON l.id = p.clientID 
    WHERE l.id = '$this->skID' AND p.productPage = 1"; 

    $res = mssql_query($select); 
    $r = mssql_fetch_row($res);  

    $url = trim($r[0]); 
    $page_id = $r[1]; 

    return $url .'/index.aspx?pageID='. $page_id . '&prodID=$this->prodID'; 

} 

OR

static function getProductURLstart($skID, $prodId){  

    $select = "SELECT l.URL, p.id FROM logins AS l 
    INNER JOIN Pages AS p ON l.id = p.clientID 
    WHERE l.id = '$skID' AND p.productPage = 1"; 

    $res = mssql_query($select); 
    $r = mssql_fetch_row($res);  

    $url = trim($r[0]); 
    $page_id = $r[1]; 

    return $url .'/index.aspx?pageID='. $page_id . '&prodID=$prodId'; 

} 
+2

你可以在[Code Review](http://codereview.stackexchange.com)中發佈這個以獲得更好的答案 – Anonymous

+1

你是否在循環中使用它。考慮到你打電話給數據庫以獲得一個頁面ID,這將會很糟糕。希望將它們存儲在緩存中,以防止對相同數據的數據庫過度調用。 – b01

回答

0

這取決於,如果你打算給模型,如讓他們喜歡的活動記錄一點點的一些功能,你可以把功能的類和使用類的成員。另外,你有充分的理由使用靜態函數嗎?如果你想應用OOP,你必須將責任賦予有意義的類,模型不應該同時獲得數據和重定向。

0

我將與第一。我總是開發我的應用程序試圖使用更少的static methods我可以並始終使用attributes,避免通過function parameters發送它們。

+0

是的 - 我也這麼認爲,但是隨着b01的提及,我在循環中多次調用此方法,因此每次循環遍歷每個產品時都必須設置$ productObj - > $ prodId和$ productObj - > $ skId。 – LeeTee

1

如果此類的實例是針對單個產品的,那麼請使用第一種方法,因爲如果在構建類時設置了它們,則沒有理由將其作爲參數傳入。

否則,如果這是超過產品,那麼第二種方法將是您的最佳選擇。因爲每次需要獲取產品URL時,您都不必爲skID和prodID調用和設置方法。

+0

是的,我將不得不多次調用這個函數,我首先調用產品類來獲取所有產品的列表,然後遍歷每個產品並調用此方法。 – LeeTee

+0

當你獲得產品清單時,你能得到頁面ID嗎?否則,您可能需要加強getProductURLstart()方法以獲取產品列表並返回結果,以便產品ID與每個結果行中的頁面ID配對。我個人會爲這個特定的部分使用存儲過程,而不是像現在這樣簡單的快速選擇。如果你寫得有效率,賭注會大大加快。 – b01