Aller au contenu

Class....


Portekoi

Sujets conseillés

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?


<?php
class 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

Lien vers le commentaire
Partager sur d’autres sites

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 $B){}

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...