Salut,
J'aurais aimé avoir votre avis sur une classe gérant les Singleton de toutes les autres classes. Voici la classe en question :
Est-ce que l'utilisation d'eval() est judicieuse ? Ne prendra-t-elle pas trop de ressources ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class EtatClasse { function verifInstanceClasse( $class, $toConstruct = array() ) { if ( !ETATCLASSE::dejaInstantiee( $class ) ) { $GLOBALS['_' . strtoupper( $class ) . '_INSTANTIEE'] = true; eval( '$GLOBALS["_' . strtoupper( $class ) . '_OBJET"] = new ' . $class . '("' . implode( '", "', $toConstruct ) . '");' ); } } function dejaInstantiee( $class ) { return $GLOBALS['_' . strtoupper( $class ) . '_INSTANTIEE']; } }
Un exemple d'utilisation de cette classe est par exemple plusieurs appels à une classe de webservices sur la même page :
Donc pour résumer, j'ai une fonction du même nom que la classe que je veux "singletoniser". Cette fonction fait l'appel à la classe "singletonisatrice" qui instancie la classe si elle ne l'est pas déjà.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 class WebService { function __construct( $url ) { $this->WebServiceClient = new SoapClient( $url ); } function call( $set ) { // Traitement } } function webService( $set ) { if ( !isset( $set['url'] ) ) { $set['url'] = WEBSERVICE_URL; } ETATCLASSE::verifInstanceClasse( __FUNCTION__, array( $set['url'] ) ); return $GLOBALS['_WEBSERVICE_OBJET']->call( $set ); } $maVar = webService( array ( 'fonction' => 'maFonctionWS', 'params' => '' ) );
Que pensez-vous de cette méthode ?
Si vous avez des questions ou des améliorations à proposer, je suis tout ouïe !
Partager