Je suis entrain d'apprendre la POO sur le PHP, j'ai jamais fais de POO alors c'est pas évident de comprendre tout d'un coup
J'ai fais ce petit script pour essayer de comprendre avec un exemple concret, il s'agit de la création d'un objet personnage avec son inventaire et les objets qu'il contient.
<?php
/*
* Personnage
*/
class personnage {
public $force;
public $vitesse;
function __construct($force, $vitesse) {
echo 'Construction du personnage... Force : ' . $force . ', Vitesse : ' . $vitesse . '<br/>';
$this->force = $force;
$this->vitesse = $vitesse;
$this->inventaire = new inventaire($force);
}
public function add_force ($force) {
$this->force = $this->force + $force;
}
}
/*
* Inventaire
*/
class inventaire extends personnage {
protected $inventaire_taille;
protected $inventaire_objets;
function __construct($force) {
$this->inventaire_objets = array();
$this->inventaire_taille = $force * 5;
$this->inventaire_objets[0] = new pomme(2);
$this->inventaire_objets[1] = new couteau(1);
echo 'Construction de l\'inventaire... Taille de l\'inventaire : ' . $this->inventaire_taille . '<br/>';
}
public function inventaire_libre() {
$this->inventaire_taille = $this->force * 5;
$inventaire_oqp = 0;
foreach($this->inventaire_objets as $k => $v) {
$inventaire_oqp = ($this->inventaire_objets[$k]->poids*$this->inventaire_objets[$k]->quantite) + $v;
}
return $this->inventaire_taille - $inventaire_oqp;
}
public function inventaire_liste() {
$inventaire = '';
foreach($this->inventaire_objets as $k => $v) {
$inventaire .= $this->inventaire_objets[$k]->nom . ' (' . $this->inventaire_objets[$k]->quantite . ')<br/>';
}
return $inventaire;
}
}
/*
* Objets
*/
abstract class objets {
public $poids;
public $type;
public $quantite;
public $nom;
function __construct($quantite) {
$this->quantite = $quantite;
}
}
/*
* Objets de type Nourriture
*/
abstract class nourritures extends objets {
public $hp;
function __construct ($quantite) {
parent::__construct($quantite);
$this->type = "Nourriture";
}
}
class pomme extends nourritures {
function __construct ($quantite) {
parent::__construct($quantite);
$this->poids = 2;
$this->nom = "Pomme";
}
}
/*
* Objets de type Armes
*/
abstract class armes extends objets {
public $degats;
function __construct ($quantite) {
parent::__construct($quantite);
$this->type = "Arme";
}
}
class couteau extends armes {
function __construct ($quantite) {
parent::__construct($quantite);
$this->poids = 5;
$this->nom = "Couteau";
}
}
$personnage = new personnage(15,15);
echo '<br/>Taille disponible dans l\'inventaire : ';
echo $personnage->inventaire->inventaire_libre();
echo '<br/><br/>Liste de l\'inventaire<br/>';
echo $personnage->inventaire->inventaire_liste();
echo '<br/><br/>Ajoute de 5 de force<br/>';
echo $personnage->add_force(5);
echo '<br/>Taille disponible dans l\'inventaire : ';
echo $personnage->inventaire->inventaire_libre();
?>
Ce que je n'arrive pas à faire c'est récuperer la propriété force de la class personnage pour l'utiliser dans la classe inventaire (voir la méthode inventaire_libre). Si je met cette méthode dans la classe personnage j'arrive à avoir le résultat que je veux... mais pour la lisibilité du code je ne trouve ça pas terrible de mettre une méthode en rapport avec l'inventaire dans la classe personnage...
Si vous pouviez m'éclaircir sur ce sujet ? Je pense que j'ai compris l'héritage mais la composition je rame
Merci à tous et à bientôt