2012-02-19 69 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和调用write方法

输出:

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

但是当我尝试和自动加载它认为Foo在src/com/b的命名空间中,因为这是Bar的命名空间,因此它不会加载。

有关如何解决此问题的任何想法?

回答

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 2012-02-19 16:25:52