Hello!
J'ai un j'ai un formulaire qui propose d'ajouter un produit standard avec un choix de type dans une select list.
mais en fonction des choix fais par l'utilisateur, cela ajoute des caractéristiques à ajouter en plus au produit standard
exemple des vêtement la taille.
donc j'ai fais une table MYSQL qui permet d'inséré quelque soit le type de produit ! (taille, poid)
J'ai fais une class Product (Pour le standard) puis j'étends cette class pour les produits plus spécialisé...
mon problème est dans l'insertion des ces produits dans la base.
En fonction du choix de l'utilisateur je construit mon produit exemple :
Ensuite je récupère mon objet puis je lui met les méthodes de base commun à chaque produit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class ProductFactory { public static function buildProduct($type) { if(!class_exists($type)) { return throw ProductExeception("affiche l'erreur"); } return new $type(); }
on va dire que j'ai class mere A puis une sous-class B qui hérite de A et une sous-class C qui elle même hérite de B et de A
pour l'insert je créer une méthode save pour sauvegarder le product.
si je fais :
si je met dans la méthode save() un produit spécialisé B ou C il le prendra puisque C ou B est A par définition à l'héritage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public function save(Product $product) { $sql = "INSERT INTO matable (id, name, date, spécial_B, spécial_C) VALUES ($product->getId(), $product->getName(), $product->getSpécial_B(), $product->getSpécial_C()); }
mais si je met un produit A il va y avoir un problème puisque il ne connaitra pas $product->getSpéciale_B() ou C.
J'espère avoir été assé claire dans mon explication lol
Donc je voudrais savoir si je me complique pas la vie pour rien et si une autre méthode serais préférable.
Le but étant de dupliquer du code pour rien .
de plus j'utilise PDO donc je fais aussi des requêtes préparer et j'utilise un tableau pour les marqueur de type (:id, :name) et je créer un méthode params pour éviter d'avoir à dupliquer mon tableau pour les méthodes updates etc
je me suis dit aussi que je pouvais utilisé instanceof pour vérifier si c'est une instance de B ou de C pour ajouter les méthodes.
J'ai aussi pensé à étendre la fabrique pour chaque spécialisation mais ca me parais un peu lourd.
Je pense qu'il y a plus simple donc j'en appel à votre sens de la logique pour m'éclairer.
Partager