Salut,

J'aurais aimé avoir votre avis sur une classe gérant les Singleton de toutes les autres classes. Voici la classe en question :

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'];
   }
 
}
Est-ce que l'utilisation d'eval() est judicieuse ? Ne prendra-t-elle pas trop de ressources ?

Un exemple d'utilisation de cette classe est par exemple plusieurs appels à une classe de webservices sur la même page :

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'    => ''
            )
         );
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à.

Que pensez-vous de cette méthode ?

Si vous avez des questions ou des améliorations à proposer, je suis tout ouïe !