Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 10 janv. 2011 à 15:44
Question de point vue, la tienne fait : return $retourClasse->newInstanceArgs($arguments); ce que je voulai absolument eviter parce que ca t'oblige a implementer tes classe sous un format unique alors qu'avec la mienne c'est generique
bj33
Messages postés145Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention 1 mai 2012 10 janv. 2011 à 12:55
salut
Je n'ai visionné que la factory et franchement je ne suis pas du tout convaincu et ne changerais pas celle que j'utilise. ex :
final class Fabrique {
private static $_instance = null;
private $_namespace;
protected function __construct() {}
/**
* retourne une instance de la classe en tenant compte du namespace
* si présent.
*
* @param $namespace
* @return object
*/
public static function getInstance($namespace = null) {
if (is_null(self::$_instance)) {
self::$_instance = new self;
}
self::$_instance->_namespace = $namespace;
return self::$_instance;
}
public function __call($methodes,$arguments) {
$classe = ucfirst(strtolower($this->_namespace.$methodes));
if (class_exists($classe,false)) {
$retourClasse = new ReflectionClass($classe);
if ($retourClasse->isInstantiable() && $retourClasse->hasMethod('__construct')) {
return $retourClasse->newInstanceArgs($arguments);
} else {
throw new Format_Generique('La classe '.$classe.' n\'est pas instanciable');
}
} else {
throw new Format_Generique('La classe '.$classe.' est introuvable');
}
}
}
si çà peut t'inspirer davantage;)
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 10 janv. 2011 à 09:48
Merci pour vos commentaires ;)
Pour la facory method j'avoue que c'est plutot lourd mais en fait j'ai eu quelque problemes avec call_user_function et j'ai trouve ca plus generique car par exemple on peu vouloir une classe avec un constructeur vide et un initialisateur et je sais plus exactement pourquoi mais ca m'a pose probleme a l'epoque j'aurais du noter exactement le soucis que j'avais eu, a la base je voulai eviter l'eval.
Pour l'exception et l'utilisation de $class et $function c'est que je trouve ca moins lourd a lire que getTrace() on sait direction de quelle classe et a quel appel l'exception a ete levee mais la c'est juste un choix esthetique en fait getTrace est plus verbose c'est sur ^^
DiGhan
Messages postés239Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention 3 juin 20101 10 janv. 2011 à 04:45
Un peu complexe.
L'algo d'instanciation de la Factory est trop lourd : utilisation de eval(), func_get_args(). Dans ce cas, l'utilisation de la réflexion est tout à fait adaptée.
Pourquoi utiliser $class et $function dans l'exception alors que l'erreur est identifiable par l'exception qui l'a créé ? Si tu veux pousser la localisation de l'erreur tu peux t'aider d'Exception::getTrace().
Il n'y a pas d'erreurs mais des problèmes de conception et "d'optimisation".
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 9 janv. 2011 à 02:39
Salut,
Désolé, je n'ai jeté un oeil que rapidement, mais... bon ben je pense qu'on peut te faire confiance sur la qualité de la source.
En plus, de ce que j'ai vu, ça m'a l'air très propre. Et je doute qu'il y ait des erreurs grossières :)
Ca fait du bien de voir des sources pure POO, ça change ^^
10 janv. 2011 à 15:44
10 janv. 2011 à 12:55
Je n'ai visionné que la factory et franchement je ne suis pas du tout convaincu et ne changerais pas celle que j'utilise. ex :
final class Fabrique {
private static $_instance = null;
private $_namespace;
protected function __construct() {}
/**
* retourne une instance de la classe en tenant compte du namespace
* si présent.
*
* @param $namespace
* @return object
*/
public static function getInstance($namespace = null) {
if (is_null(self::$_instance)) {
self::$_instance = new self;
}
self::$_instance->_namespace = $namespace;
return self::$_instance;
}
public function __call($methodes,$arguments) {
$classe = ucfirst(strtolower($this->_namespace.$methodes));
if (class_exists($classe,false)) {
$retourClasse = new ReflectionClass($classe);
if ($retourClasse->isInstantiable() && $retourClasse->hasMethod('__construct')) {
return $retourClasse->newInstanceArgs($arguments);
} else {
throw new Format_Generique('La classe '.$classe.' n\'est pas instanciable');
}
} else {
throw new Format_Generique('La classe '.$classe.' est introuvable');
}
}
}
si çà peut t'inspirer davantage;)
10 janv. 2011 à 09:48
Pour la facory method j'avoue que c'est plutot lourd mais en fait j'ai eu quelque problemes avec call_user_function et j'ai trouve ca plus generique car par exemple on peu vouloir une classe avec un constructeur vide et un initialisateur et je sais plus exactement pourquoi mais ca m'a pose probleme a l'epoque j'aurais du noter exactement le soucis que j'avais eu, a la base je voulai eviter l'eval.
Pour l'exception et l'utilisation de $class et $function c'est que je trouve ca moins lourd a lire que getTrace() on sait direction de quelle classe et a quel appel l'exception a ete levee mais la c'est juste un choix esthetique en fait getTrace est plus verbose c'est sur ^^
10 janv. 2011 à 04:45
L'algo d'instanciation de la Factory est trop lourd : utilisation de eval(), func_get_args(). Dans ce cas, l'utilisation de la réflexion est tout à fait adaptée.
Pourquoi utiliser $class et $function dans l'exception alors que l'erreur est identifiable par l'exception qui l'a créé ? Si tu veux pousser la localisation de l'erreur tu peux t'aider d'Exception::getTrace().
Il n'y a pas d'erreurs mais des problèmes de conception et "d'optimisation".
9 janv. 2011 à 02:39
Désolé, je n'ai jeté un oeil que rapidement, mais... bon ben je pense qu'on peut te faire confiance sur la qualité de la source.
En plus, de ce que j'ai vu, ça m'a l'air très propre. Et je doute qu'il y ait des erreurs grossières :)
Ca fait du bien de voir des sources pure POO, ça change ^^