2011-11-29 79 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