2017-04-10 4 views
0

Ich habe eine Frage zu spl_autoload_register in php. es nämlich ist ..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); 

}); 

, wenn ich in einer Klasse ‚Verwendung foo‘ verwendet wird, ich die spl_autoload_register wollen wie src \ store \ Dienste nutzen \ Httprequest ... aber es gibt so redaclare.

kann ich es lösen?

Dank für die Antworten ..

+0

'require' zu' require_once' – JustOnUnderMillions

Antwort

0

class_exists() - Prüft, ob die Klasse hat

ändern Sie Ihren Autoloader erste Prüfung definiert, wenn die Klasse bereits geladen worden ist, und es dann, wenn so ignorieren. Das Problem besteht darin, dass beim wiederholten Laden der Klassendatei versucht wird, die Klasse erneut zu deklarieren.

So etwas zu tun, bevor die require $class Anweisung sollte es beheben. Beachten Sie auch die Verwendung von false als das zweite Argument, um zu verhindern, dass es sich selbst automatisch lädt.

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

würde ich auch statt Verwendung von require_once machen vorschlagen. Dadurch wird verhindert, dass dieselbe Datei geladen wird. Sie müssen sie manuell laden.

Verwandte Themen