2016-12-07 2 views
0
#file1 
spl_autoload_register(function($class){ 
    require_once "{$class}.php"; 
}); 

new classes\Foo(); 

#file2 
namespace classes; 
class Foo implements toolInterface { 
    function __construct(){ 
     echo __CLASS__; 
    } 

    public function tool(){ 

    } 
} 

Ich habe ein Problem mit spl_autoload_register, obigem Beispiel funktioniert gut, aber wenn ich versuche use classes verwenden wird es fatale Fehler hat, weiß jemand, wie dieses Problem zu lösen?spl_autoload_register konnte nicht „Verwendung“ erhalten Namespace

//fatal error 
spl_autoload_register(function($class){ 
    require_once "{$class}.php"; 
}); 

use classes; 
new Foo(); 

Antwort

1

Die Fähigkeit, mit einem Alias ​​zu einem externen vollständig qualifizierten Namen zu verweisen

Beachten Sie, dass für benannte Namen (Fully Qualified Namespace-Namen enthält Namespaceseparator, wie Foo \ Bar im Gegensatz Namen zu globalen, dass nicht, wie FooBar), der führende Backslash ist unnötig und nicht empfohlen, als Import-Namen müssen vollständig qualifiziert sein, und sind nicht relativ zum aktuellen Namespace verarbeitet.

PHP: Using namespaces: Aliasing/Importing

Also müssen wir den voll qualifizierten Namen

use classes\Foo; 
new Foo(); 
0

Wenn Sie sich die $class Variable auf den Verschluss versehen Sie Sie werden bemerken, dass die FQCN (Fully Qualified Klassenname) gegeben ist. In Ihrem Fall:

classes\Foo 

Sie müssen sicherstellen, dass der Dateipfad dafür korrekt ist.

Oder Sie könnten auch den De-facto-Standard verwenden - Composer - Haben Sie nichts dagegen, dass die Homepage ein Bild von einem Dirigenten hat.

Verwandte Themen