2016-12-07 8 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(){ 

    } 
} 

を取得できませんでした、上記の例正常に動作しますが、私はuse classesを使用しようとすると、それは誰もがこの問題を解決する方法を知って、致命的なエラーを持っているのだろうか?spl_autoload_register私はspl_autoload_registerに問題がある「使用」名前空間

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

use classes; 
new Foo(); 

答えて

1

そのグローバル 名とは対照的に、 は、Fooの\バーとして名前空間の区切りを含む名前空間名(完全修飾された名前空間名のことを別名

注意して外部の完全修飾名を参照する機能FooBarなど)では、先頭のバックスラッシュは 不要で推奨されません。は、完全に の名前でなければならず、現在のネームスペースに対して処理されません。

PHP: Using namespaces: Aliasing/Importing

だから我々は

use classes\Foo; 
new Foo(); 
完全修飾名が必要
0

、あなたがFQCN(完全修飾クラス名)が与えられていることに注意しましょう持って閉鎖に提供$class変数をログインした場合。あなたの場合:

classes\Foo 

ファイルパスが正しいことを確認する必要があります。

また、デファクトスタンダードを使用することもできます。Composer - ホームページには指揮者の写真があることに気をつけません。

関連する問題