24-08-2009, 07:45 AM
Un exemple avant de partir bosser.
Je te conseille l'anglais pour faciliter le nommage.
Je te conseille l'anglais pour faciliter le nommage.
class Character {
// Les caractéristiques
protected $_health;
protected $_strength;
// ...
// Contient une chaîne genre Soldier. C'est le nom de la classe fille à utiliser.
protected $_type;
/**
* Returne un tableau d'object Personnage (ou une de ses sous-classes)
* en recherchant par le nom.
*/
public static function find_by_name(){
$users = array();
/**
* Requête à base de données qui récupère un personnage.
* J'admet que $db existe déjà et que tu utilises PDO.
*/
$sql = 'SELECT * FROM characters ORDER BY BET';
$resource = $db->prepare($sql);
$resource->execute();
while($row = $resource->fetch(PDO::FETCH_OBJ)){
/**
* Là, il convient de faire un peu de magie : on va générer un appel vers
* la classe fille. Ainsi, si type était Soldier, ça va instancier un objet
* Soldier, sur lequel tu pourras appeler toutes les méthodes de la classe
* Character, puisque Soldier en hérite.
*/
$user = new $row->type;
$user->setName($row->name);
$user->setStrength($row->strength);
$users[] = $user;
}
return $users;
}
/**
* Les getChose et setChose, comme je t'ai déjà montré.
*/
/**
* Retourne la liste de tes classes.
*/
public function getAllowedTypes(){
$allowed_types = array("Soldier", "Medic");
return $allowed_types;
}
public function getType(){
return $this->_type;
}
public function setType($type){
$allowed_types = $this->getAllowedTypes();
if(in_array($type, $allowed_types)){
$this->_type = $type
}
else {
throw new Exception("Cette classe n'existe pas.");
}
}
}
class Soldier extends Character {
/**
* Ce que tu veux
*/
}