Ho sempre mantenuto il codice per caricare un oggetto all'interno dell'oggetto stesso. In questo modo, indipendentemente dal metodo che sta creando l'oggetto, ha sempre accesso al metodo per caricare l'oggetto. Tuttavia questo significa che se sto caricando un sacco di oggetti devo creare una copia vuota di un oggetto per recuperare una matrice di oggetti, e non sembra essere il modo più logico di caricare una matrice di oggetti. Prendi questo codice come esempio, una pagina sta caricando un sacco di prodotti.
class Product() {
// product variables...
public function LoadProducts($dbConn, $where) {
$products = array();
$query = "SELECT * FROM products $where";
$results = $dbConn->query($query);
while($row = $results->fetch_assoc()) {
$products[$row['pId']] = new Product();
$products[$row['pId']]->StoreVars($row);
}
return $products;
}
public function StoreVars($row) {
foreach($row as $key => $val) {
$this->$key = $val;
}
}
}
class Page() {
// page variables...
public function DrawPage($dbConn) {
$product = new Product();
$where = "Some where clause";
$products = $product->LoadProducts($dbConn, $where);
// Do something with products to output HTML to the page...
}
}
La maggior parte dei miei oggetti come product
seguono un modello simile. Questa è una buona pratica? C'è un modo diverso / standard per farlo? Sto facendo questo correttamente? Mi sembra un po 'inutile chiamare un'istanza vuota di prodotto per caricare tutti i prodotti, ma non so dove altro mettere quella funzione, quindi non devo avere molte copie della stessa query.