OOP php方法-在对象内部传递变量或从对象内部获取变量

OOP php方法-在对象内部传递变量或从对象内部获取变量,php,object,Php,Object,我是OOP新手,已经编写了一个产品类。一切都很好,但我不确定下面这个类中哪个版本的方法是最好的 第一个从对象中获取变量,第二个将变量传递到类中。两者都有效。我最初把它作为第一个版本,但事情似乎进展缓慢,然后改为第二个版本 public function getProductURLstart(){ $select = "SELECT l.URL, p.id FROM logins AS l INNER JOIN Pages AS p ON l.id = p.clientID

我是OOP新手,已经编写了一个产品类。一切都很好,但我不确定下面这个类中哪个版本的方法是最好的

第一个从对象中获取变量,第二个将变量传递到类中。两者都有效。我最初把它作为第一个版本,但事情似乎进展缓慢,然后改为第二个版本

 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';

}


这取决于,如果您计划为模型提供一些功能,比如让它们有点像活动记录,那么您可以将这些功能放在类中并使用类的成员。此外,您是否有充分的理由使用静态函数?如果你想应用OOP,你必须把责任交给有意义的类,一个模型不应该既获取数据又进行重定向。

这取决于,如果你计划给模型一些功能,比如让它们有点像活动记录,你可以把这些功能放在类中并使用类的成员。此外,您是否有充分的理由使用静态函数?如果你想应用OOP,你必须将责任赋予有意义的类,一个模型不应该既获取数据又进行重定向。

我会支持第一个。我一直在开发我的应用程序,尝试使用尽可能少的
静态方法
,并且总是使用
属性
,避免通过
功能参数发送它们

,我将首先使用。我开发我的应用程序时总是尽量使用较少的
静态方法
,并且总是使用
属性
,避免通过
功能参数发送它们

,如果此类实例用于单个产品,则使用第一种方法,因为如果在构造类时设置了参数,就没有理由将其作为参数传入


否则,如果这不仅仅是针对产品,那么第二种方法将是您的最佳选择。因为您不必每次需要获取产品URL时都为skID和prodID调用和设置方法。

如果该类的实例用于单个产品,则使用第一个方法,因为如果在构建类时设置了参数,则没有理由将其作为参数传入


否则,如果这不仅仅是针对产品,那么第二种方法将是您的最佳选择。因为您不必每次需要获取产品URL时都调用和设置skID和prodID的方法。

您可以将此信息发布到中以获得更好的回答您是否在循环中使用此信息。这将是不好的,因为您只为页面ID调用DB。希望您将这些存储在缓存中,以防止对相同数据的DB进行过多调用。您可以将其发布以获得更好的答案您是否在循环中使用它。这将是不好的,因为您只为页面ID调用DB。希望您将这些存储在缓存中,以防止对相同数据的DB进行过多调用。是的,我将不得不多次调用,我首先调用product类来获取所有产品的列表,然后遍历每个产品并调用此方法。当您获取产品列表时,您能获取页面ID吗?否则,您可能需要增强“getProductURLstart()”方法,以获取产品列表并返回结果,以便产品id与每个结果行中的页面id配对。我个人会为这个特定的部分使用存储过程,而不是像您现在这样简单的快速选择。如果你能高效地编写它,那么速度肯定会大大加快。是的,我必须多次调用它,我首先调用product类来获取所有产品的列表,然后循环遍历每个产品并调用此方法。在获取产品列表时,你能获取页面ID吗?否则,您可能需要增强“getProductURLstart()”方法,以获取产品列表并返回结果,以便产品id与每个结果行中的页面id配对。我个人会为这个特定的部分使用存储过程,而不是像您现在这样简单的快速选择。如果你有效地编写它,打赌速度会大大加快。是的-我也这么认为,但正如b01所提到的,我在循环中多次调用此方法,因此每次循环每个产品时都必须设置$productObj->$prodId和$productObj->$SLIDK。是的-我也这么认为,但正如b01所提到的,我在循环中多次调用此方法,因此每次循环每个产品时都必须设置$productObj->$prodId和$productObj->$SLIDK。
 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';

}