2017-04-10 5 views
0

J'ai une question à propos de spl_autoload_register dans php. il est à savoir ..php spl_autoload_register redaclare

// Use default autoload implementation 
spl_autoload_register(function($class){ 

    //========================================== 
    //use foo => src\store\services\httprequest 
    //========================================== 
    if($class=="foo"){ 
     $class='src\store\services\httprequest'; 
    } 

    $class=root.'/'.$class.'.php'; 

    $class=str_replace("\\","/",$class); 

    require($class); 

}); 

quand je 'utilisation foo' dans une classe, je veux l'utiliser comme spl_autoload_register à src \ store services \ \ HTTPRequest ... mais il revient en tant que redaclare.

puis-je le résoudre?

merci pour les réponses ..

+0

'require' à' require_once' – JustOnUnderMillions

Répondre

0

class_exists() - Vérifie si la classe a été définie

Changez votre chargeur automatique d'abord vérifier si la classe a déjà été chargé, puis l'ignorer si oui. Le problème est que lorsque vous chargez plusieurs fois le fichier de classe, il essaie de redéclarer la classe.

Faire quelque chose comme ceci juste avant l'instruction require $class devrait le réparer. Notez également l'utilisation de false comme deuxième argument pour l'empêcher de se charger automatiquement.

if (class_exists($class, false)) { 
    return; 
} 

Je suggère également faire usage de require_once à la place. Cela empêchera le chargement du même fichier que vous le chargez manuellement.