I am new to OOP and have written a products class. All is working fine but I am unsure which of the below version of a method within this class is best?
The first gets the variables from within the object and the second passes the variables into the class. Both work. I originally had it as the first version but things seems to be running slow and then changed it to the second.
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';
}
It depends, if you plan to give models some functionality like making them a little bit like active records, you can put the functionality in the class and use the class' members. Besides, do you have a good reason to use static functions? If you want to apply OOP, you have to give responsibilities to meaningful classes, a model should not both get data and do the redirection.
I'll be with the first. I always develop my app trying to use the less static methods
I can and always using attributes
, avoiding sending them by function parameters
.
If the instance of this class is for a single product, then use the first method,as there would be no reason to pass it in as parameters if you have them set when you construct the class.
Otherwise, if this is for more than on product, then the second method would be your best choice. As you will not have to call and set methods for the skID and prodID every time you need to get a product URL.