2012-02-19 4 views
0

私はPhp5.3で名前空間を使用してオートロードを実装しようとしていますが、何か問題があり、なぜ動作しないのかわかりません。PHPの異なるパス名スペースとオートロードが動作しない

私は

/root 
--bootstrap.php 
--test.php 
--/src 
----/com 
------/a 
--------Foo.php 
------/b 
--------Bar.php 

bootstrap.phpの

<?php 
function __autoload($class) { 
    // convert namespace to full file path 
    echo $class.'<br>'; 
    $class = str_replace('\\', '/', $class) . '.php'; 
    require_once($class); 
} 

Foo.php

<?php 
namespace src\com\a { 

    class Foo { 

     public function write() { 
      echo "write"; 
     } 
    } 
} 

Bar.php

<?php 

use \src\com\a\Foo; 

namespace src\com\b { 

    class Bar { 

     public function write() { 
      $foo = new Foo(); 
      $foo->write(); 
     } 
    } 
} 
の基本的なディレクトリ構造を持っています

test.phpを

<?php 
use \src\com\b\Bar; 
require_once("bootstrap.php"); 

$bar = new Bar(); 
$bar->write(); 

だから基本的な前提は、順番にはFooを含んでおり、書き込み方法

出力呼び出すコールバー、次のとおりです。

src\com\b\Bar 
src\com\b\Foo 

をしかし、私はそれを試してみて、自動ロードするときそれがBarの名前空間であるため、Fooがsrc/com/bの名前空間にあると考えて、ロードしません。

これを修正する方法についてのご意見はありますか?

答えて

1

それはする必要がありますbar.phpのようになります。そのため

<?php 


namespace src\com\b; 
use \src\com\a\Foo; 

    class Bar { 

     public function write() { 
      $foo = new Foo(); 
      $foo->write(); 
     } 
    } 

?> 
+0

D'ああ、ありがとう:) – TheStoneFox

関連する問題