Eléphant du PHP |
60 Messages
29 janv. 2012, 23:00
Bonjour,
je souhaite répondre à ce que tu souhaites faire :
Je souhaite créer des objets Pizza (alimentés par une requete SQL) que je pourrais afficher (y compris ses leurs attributs : nom, prix, tableau d'ingredients, etc) à n'importe quel moment sans avoir à refaire une requete SQL
Etant donné ce que tu souhaite, il me semble qu'en terme de conception il serait mieux de séparer ton code en deux classes :
- une classe qui représente un pizza et que tu instancierais pour chaque nouvelle pizza.
- une autre classe qui te permettrait d'effectuer des opérations sur les pizzas. A cet effet, je pense nécessaire que tu ajoute
la propriété "id" à ton objet pizza; Cela te permettra de différencier à coup sûr (en principe) deux pizzas.
Ceci dit, certaines questions ne sont pas traitées ici mais j'ose croire que tu les gères quelque part à savoir :
- comment sont gérés la création/modification/suppression des pizzas en base de données ?
- comment comptes-tu réfléter ces modifications sur les pizzas déjà chargées dans ton tableau le cas échéant.
Trève de discours, voici du code illustrant l'implémentation que je te propose :
Code : Tout sélectionner
/**
* Représente une pizza récupérée et chargée via la base de données
*/
class Pizza
{
public $id;
public $nom;
public $prixPetite;
public $prixGrande;
public $base;
public $ingredients;
public function __construct($pId, $pNom,$pPrixPetite,$pPrixGrande,$pBase,$pIngredients)
{
$this->id = $pId;
$this->nom = $pNom;
$this->prixPetite = $pPrixPetite;
$this->prixGrande = $pPrixGrande;
$this->base = $pBase;
$this->ingredients = $pIngredients;
}
}
/**
* Fournit des méthodes permettant de "traiter" des (objets) pizzas.
*/
class PizzaService
{
public static $tableau_pizzas = array();
/**
* Ajoute un objet pizza au tableau de pizzas
*/
public static function ajouterPizza(Pizza $maPizza)
{
// On ajoute la pizza que si elle n'existe pas déjà (par exemple)
// A contrario on pourrait choisir de remplacer toute entrée existante
if(!isset(self::$tableau_pizzas[$maPizza->id])
{
self::$tableau_pizzas[$maPizza->id] = $maPizza;
}
}
/**
* Crée un nouvel objet pizza et l'ajoute au tableau
* Typiquement, cette fonction permettrait de charger les objets pizzas,
* suite à la récupération des infos en base de données.
*/
public static function chargerPizza($pId, $pNom,$pPrixPetite,$pPrixGrande,$pBase,$pIngredients)
{
$pizza = new Pizza($pId, $pNom,$pPrixPetite,$pPrixGrande,$pBase,$pIngredients);
self::ajouterPizza($pizza);
}
/**
* Affiche une liste des pizzas actuellement chargées dans le tableau
*/
public static function listerNomsDesPizzas()
{
foreach(self::$tableau_pizzas as $id => $objetPizza)
{
echo $objetPizza->id . " : " . $objetPizza->nom . PHP_EOL;
}
}
}
P.S.:
Si tu utilises une version php d'au moins 5.3.0, tu as également la classe
SplObjectStorage qui est toute faite et peut t'aider à faire ce que tu veux de manière élégante.
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein.