Portekoi Posté 30 Mars 2012 Posté 30 Mars 2012 Bonjour, Je débute... enfin... je re débute dans la POO. J'ai écris ceci en guise d'essai. Ma question, quelles sont mes erreurs et comment écrire cela plus correctement et/ou simplement? <?phpclass ville{ private $_batiment = array(); public $_resultat = array(); private $_ville; private $_id; function __construct($ville){ $this -> _ville = $ville; } public function description(){ echo "<b>Batiment dans la ville de ". $this -> _ville ." :</b><br><ul>"; for($i = 0;$i < sizeof($this -> _resultat); $i++){ echo $this -> _resultat[$i]; } echo "</ul>"; } public function AddBatiment($type, $nom, $couleur, $forme){ if(is_subclass_of($type, "Batiment")) { $this -> _id = sizeof($this -> _batiment); if($type == "ecole"){ $this -> _batiment[$this -> _id] = new ecole($nom); $this -> _batiment[$this -> _id] -> forme(); }elseif($type == "mairie"){ $this -> _batiment[$this -> _id] = new mairie($nom); $this -> _batiment[$this -> _id] -> forme(); }elseif($type == "tabac"){ $this -> _batiment[$this -> _id] = new tabac($nom); } if(trim($couleur) != ""){ $this -> _batiment[$this -> _id] -> _couleur = $couleur; } if(trim($forme) != ""){ $this -> _batiment[$this -> _id] -> _forme = $forme; } //echo $this -> _batiment[$this -> _id] -> _forme . " - " . $forme . "<br>"; $this -> _resultat[sizeof($this -> _resultat)] = "<li>Ce batiment est un/une " . get_class($this -> _batiment[$this -> _id]) . " (". $this -> _batiment[$this -> _id] -> _nom.") et a une forme " . $this -> _batiment[$this -> _id] -> _forme . " de couleur " . $this -> _batiment[$this -> _id] -> _couleur . "</li>" ; }else{ $this -> _resultat[sizeof($this -> _resultat)] = "<li>" . $type . " n'est pas un batiment connu</li>"; } }}class batiment{ public $_nom; public $_forme; public $_couleur; public $_toit; public $_type; function __construct($nom){ $this -> _nom = $nom; $this -> _forme = "rectangulaire"; $this -> _couleur = "bleue"; $this -> _toit = "pointu"; } function couleur($couleur){ $this -> _couleur = $couleur; } function forme($forme){ $this -> _forme = $forme; }}class ecole extends batiment{ public $_forme; function forme(){ $this -> _forme = "carrée"; }}class mairie extends batiment{ public $_forme; function forme(){ $this -> _forme = "ronde"; }}class tabac extends batiment{ /*public $_forme; function forme(){ $this -> _forme = "ronde"; }*/}$temp = new ville("Portekoi");$temp -> AddBatiment("ecole", "Sainte Marie", "blanche", "");$temp -> AddBatiment("mairie", "Mairie", "noire", "carrée");$temp -> AddBatiment("banque", "BNP", "violette", "Octogonale");$temp -> AddBatiment("tabac", "Tabac de la gare", "rose", "ronde");$temp -> description();$temp = new ville("Posant");$temp -> AddBatiment("ecole", "Sainte Thérèse", "grise", "");$temp -> description();?> Merci
SStephane Posté 31 Mars 2012 Posté 31 Mars 2012 Rapidement, Ta methode addbatiment devrait logiquement prendre en paramètre un objet de type batiment et non des strings qui vont servir à la construire, c'est pas logique (à cause du add). Note que tu peux faire du typage fort depuis peu : public addBatiment(Batiment ${} Tu n'as pas à tester que $b est de type batiment pour le coup, puisque tazbac, ecole etc en hérite. Ca donne : $temp = new ville("Portekoi");$ecole = new Ecole("Sainte Marie");$temp->addBatiment($ecole); Rien à voir avec l'oop mais : $this -> _id = sizeof($this -> _batiment);$this -> _batiment[$this -> _id] = new ecole($nom);//-->$this -> _batiment[] = new ecole($nom); Si tu t'intéresses aux design pattern, batiment, ecole, tabac... tu peux t'intéresser à factory, c'est +/- ce que tu fais à l'heure actuelle en créant tes bâtiments de cette manière.
Nicolas Posté 31 Mars 2012 Posté 31 Mars 2012 Salut Portekoi, Je pense que tu devrais en profiter pour faire ton code avec une structure MVC surtout si ton projet devient important. Bien sur c'est pas une obligation mais c'est pas mal pour la clareté du code. Il y a une documentation de 250 pages (mise à jour le 26 mars 2012) POO et le MVC sur le site du zero : http://www.siteduzero.com/tutoriel-3-147180-la-programmation-orientee-objet-en-php.html
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant