@Nico : A mon avis il y a deux cas...
Premier cas, tu as des requêtes exécutées en double, par exemple un même objet lié à deux endroits différents et que tu charges du coup deux fois... par exemple si tu as une liste de joueurs, pour chaque joueur une race, et quand tu affiches la liste des joueurs, pour chacun d'eux il va chercher les informations sur la race en base... (cas des tables de refs).
Dans ce cas, une solution c'est d'avoir un objet unique (singleton) par lequel passent toutes les demandes pour obtenir la race, exemple rapide :
Et ensuite pour l'utiliser :
Le premier appel va créer l'instance car elle n'existe pas encore, et charger la liste des races, puis retourne la race voulue (1).
Le second appel ne fait plus que retourner la race voulue (2).
Le second cas, c'est une histoire de cache, trop de données rechargées à chaque fois alors qu'elles ne sont pas modifiées, c'est qu'explique Myrina
Hop, je rajoute que du coup, dans ton objet Joueur, ça peut donner ça :
Premier cas, tu as des requêtes exécutées en double, par exemple un même objet lié à deux endroits différents et que tu charges du coup deux fois... par exemple si tu as une liste de joueurs, pour chaque joueur une race, et quand tu affiches la liste des joueurs, pour chacun d'eux il va chercher les informations sur la race en base... (cas des tables de refs).
Dans ce cas, une solution c'est d'avoir un objet unique (singleton) par lequel passent toutes les demandes pour obtenir la race, exemple rapide :
class RaceSingleton {
protected $_races = array();
private function __construct() {
// ici chargement de la liste des races (unique requête SQL)
$this->_races = foo();
}
static public function getInstance()
{
static $instance = null;
if (is_null($instance)) {
$instance = new self();
}
return $instance;
}
public function getRace($id)
{
return $this->_races[$id];
}
}
Et ensuite pour l'utiliser :
$infoRace1 = RaceSingleton::getInstance()->getRace(1);
$infoRace2 = RaceSingleton::getInstance()->getRace(2);
Le premier appel va créer l'instance car elle n'existe pas encore, et charger la liste des races, puis retourne la race voulue (1).
Le second appel ne fait plus que retourner la race voulue (2).
Le second cas, c'est une histoire de cache, trop de données rechargées à chaque fois alors qu'elles ne sont pas modifiées, c'est qu'explique Myrina
Hop, je rajoute que du coup, dans ton objet Joueur, ça peut donner ça :
class Joueur
{
...
protected $_race_id;
public function getRace()
{
return RaceSingleton::getInstance()->getRace($this->_race_id);
}
...
}