avril
2008
Voici un petit exercice que je me suis inventé il y a peu, pour jouer avec la flexibilité du modèle objet de PHP5. J’ai d’ailleurs pu relever un bug de PHP, mon premier
Je vais vous le donner pour réflexion, si vous voulez vous amuser ou tout simplement trouver un challenge de programmation (faisant intervenir la POO, la reflection, les itérateurs …)
L’exercice est simple : je veux créer un aggrégateur d’objets, voici l’UC :
<?php
class aggregateur extends aggregator
{
protected $foo;
protected $bar;
public $me;
}
class foo { }
class bar { }
$a = new aggregateur();
$a->setFoo(new foo);
$a->setBar(new bar);
$a->setBar(new bar);
$a->setBar('something that is not an object Bar'); // erreur
$a->setMe('anything here should raise an error because $me is public'); //erreur
foreach ($a as $k=>$v) {
var_dump($v); // object foo, object bar, object bar
}
Le but est de créer la classe abstraite aggregator
Il faut que chaque propriété non publique de mon objet dérivé de aggregator (aggregateur dans mon exemple), puisse accueillir des instances d’objets portant son nom
Et bien sur l’itérateur utilisé dans foreach devra me retourner toutes ces instances là ^^
Je donne la correction un de ces quatre, actuellement le bug PHP empêche l’itérateur de fonctionner, mais le reste marche bien ^^.
PS : a la question à quoi tout cela sert-il?, la réponse est : juste à se challenger, en réalité l’utilité d’un tel système n’est pas très éprouvée au sein d’une application web.
Commentaires récents
Archives
- novembre 2010
- août 2010
- juillet 2010
- juin 2010
- mai 2010
- avril 2010
- mars 2010
- février 2010
- janvier 2010
- décembre 2009
- novembre 2009
- octobre 2009
- septembre 2009
- août 2009
- juillet 2009
- juin 2009
- mai 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009
- décembre 2008
- novembre 2008
- octobre 2008
- septembre 2008
- août 2008
- juillet 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- août 2007
- juillet 2007
- juin 2007
- mai 2007
- avril 2007
- mars 2007
- février 2007