Je réagis au code de Christouphe (DAO_UNITE)
perso, j'ai voulu alléger le code pour pas me retrouver avec 50 lignes de '$this->_a = $a'
c'est probablement plus lent d'un point de vue exécution, mais tellement plus pratique
j'utilise les mêmes notations que Christouphe, à savoir, pour chaque champ j'ai un _ devant son nom ($this->_a)
l'idée qui est derrière c'est que le tableau de données est le résultat direct d'une simple requête SELECT (résultat associatif nom du champ => valeur)
de fait, quand on modifie la table (en ajoutant un champ, en le renommant, etc...) il suffit d' ajouter/modifier une propriété dans la classe.
ainsi j'ai une classe "générique" qui ne fait pas grand chose à part ce morceau de code. Puis chaque classe spécialisée par table hérite de celle ci. Inutile alors de créer un constructeur pour chaque classe spécialisée.
Evidemment, dans le cas où les données en bdd ne conviennent pas directement on utilisera un constructeur spécifique du type :
après on peut imaginer la même chose pour les méthodes getter et setter via l'appel des méthodes magiques (si tous les champs sont accessibles de la même manière)
ça évite d'avoir trop de code sans intérêt, on peut pas dire que :
[code=PHP]function getToto()
{
return $this->_toto;
}
soit très intéressant à lire ^^
maintenant j'utilise quand même très peu les getters et les setters, mais c'est uniquement car le côté générique n'est valable que pour 3-4 données, tout le reste étant en spécifique voire interdit d'accès (protected)
qu'est ce que j'ai glandé pour que mon code php ne s'affiche pas ?
à oui, mieux comme ça ^^
perso, j'ai voulu alléger le code pour pas me retrouver avec 50 lignes de '$this->_a = $a'
c'est probablement plus lent d'un point de vue exécution, mais tellement plus pratique
/**
* instancie avec les valeurs un objet
*
* @param tableau est un tableau associatif propriété (sans "_") => valeur
* attention, seules les propriétés doivent indicer le tableau, toute autre clé générera une erreur
* @since 1.0
*/
public function __construct ($tableau)
{
foreach ($tableau as $champ => $valeur)
{
$champ ='_'.$champ;
$this->$champ = $valeur;
}
}
j'utilise les mêmes notations que Christouphe, à savoir, pour chaque champ j'ai un _ devant son nom ($this->_a)
l'idée qui est derrière c'est que le tableau de données est le résultat direct d'une simple requête SELECT (résultat associatif nom du champ => valeur)
de fait, quand on modifie la table (en ajoutant un champ, en le renommant, etc...) il suffit d' ajouter/modifier une propriété dans la classe.
ainsi j'ai une classe "générique" qui ne fait pas grand chose à part ce morceau de code. Puis chaque classe spécialisée par table hérite de celle ci. Inutile alors de créer un constructeur pour chaque classe spécialisée.
Evidemment, dans le cas où les données en bdd ne conviennent pas directement on utilisera un constructeur spécifique du type :
public function __construct ($tableau)
{
$tableau['le champ à retravailler'] = $tableau['le champ à retravailler'] + 48; // ou n'importe quelle opération
parent::__construct($tableau);
}
après on peut imaginer la même chose pour les méthodes getter et setter via l'appel des méthodes magiques (si tous les champs sont accessibles de la même manière)
ça évite d'avoir trop de code sans intérêt, on peut pas dire que :
[code=PHP]function getToto()
{
return $this->_toto;
}
soit très intéressant à lire ^^
maintenant j'utilise quand même très peu les getters et les setters, mais c'est uniquement car le côté générique n'est valable que pour 3-4 données, tout le reste étant en spécifique voire interdit d'accès (protected)
qu'est ce que j'ai glandé pour que mon code php ne s'affiche pas ?
à oui, mieux comme ça ^^