Ok, je me lance. C'est dans le désordre, et n'engage bien sûr que moi:
- le constructeur de la classe Arrangeur en fait trop. Le constructeur doit se contenter d'initialiser les propriétés. Il est préférable de lancer explicitement toutes les autres opérations.
- un petit sucre syntaxique (question de préférence): je retourne toujours $this dans les méthodes setXXX. Cela permet de faire des raccourcis du genre:
$objet->setCeci()->setCela();
- La propriété static de mots me chiffonne. Je distinguerais la classe Mots et un conteneur de mots, parce qu'un objet (Mot) n'a pas vocation à gérer une collection d'objets du même genre.
- Mot ne contiendrai que le mot/source lui-même, et toutes futures méthodes qui s'appliquent au mot.
- MotContainer, comme son nom l'indique, serait ceci:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| //choisis ArrayAccess ou Iterator en fonction de tes besoins
class MotsContainer implements ArrayAccess, Iterator
{
$private container = array();
public function offsetExists ( $offset ) { //à implémenter. Voir la doc sur ArrayAccess }
public function offsetGet ( $offset ) { //à implémenter. Voir la doc }
public function offsetSet ( $offset , $value ) { //à implémenter. Voir la doc }
public function offsetUnset ( $offset ) { //à implémenter. Voir la doc }
//ou
public function current () { /*voir doc sur Iterator */}
public function key (){ /*voir doc sur Iterator*/ }
public function next (){ /*voir doc sur Iterator*/}
public function rewind (){ /*voir doc sur Iterator*/ }
public function valid (){ /*voir doc sur Iterator*/ }
} |
Ce faisant, on n'utilise plus la méthode getNbCollection.
Cela changerait le code de la classe Arrangeur comme ça:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| function __construct($texte)
{
//nouvelle initialisation
$this->mots = new MotsContainer();
//etc...
}
private function getArrangement()
{
//$this->mots se comporte comme un array, donc on peut faire:
$nb = count($this->mots); //plus élégant que $nb = $this->mots[0]->getNbCollection();
for ($i=0; $i<$nb; $i++) {
echo $this->mots[$i]->getSource();
// fonctions de traitement à définir
}
//ou on fait
foreach($this->mots as $mot) {
echo $mot->getSource();
}
} |
Partager