[POO] Gestion des Singleton
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:
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:
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 !
:merci: