2010-03-22 3 views
4

Je travaille sur une API Web PHP qui m'a été remise avec beaucoup de code qui doit être refactorisé. Ceux qui ont écrit le code voulaient inclure une classe de configuration statique à une ressource api puis obtenir une instance de ce quelque chose de classe comme ceci:PHP: Obtenir l'instance de la classe statique par la valeur de la chaîne

<?php 
$obj = "User"; 
$confObjectSuffix = "_conf"; 
$confObject = $obj.$confObjectSuffix; 
if ($confObject::inst()->checkMethod($method)) { 
..... 

Cela donne l'erreur « Erreur d'analyse: erreur de syntaxe, T_PAAMAYIM_NEKUDOTAYIM inattendue ..... "puisque $ confObject est une chaîne et non un objet.

J'écrit quelques TestCode:

<?php 

$class = "User_conf"; 
echo "<pre>"; 
print_r($$class::Inst()); 
echo "</pre>"; 

class User_conf { 
    private static $INSTANCE = null; 

    public static function Inst() { 
     if(User_conf::$INSTANCE === null) { 
      User_conf::$INSTANCE = new User_conf(); 
     } 

     return User_conf::$INSTANCE; 
    } 
} 

mais ne peut pas obtenir de travailler avec $$ non plus, est-il une autre façon de contourner cela? Je ne veux pas réécrire plus que nécessaire.

Répondre

6

Vous pouvez utiliser call_user_func pour capturer l'instance, alors traiter au besoin:

$instance = call_user_func(array($confObject, 'inst')); 

if($instance->checkMethod($method)) { 
    ... 
+0

Merci, qui l'a fait! – Tirithen

Questions connexes