我正在尝试使用命名空间在 Php5.3 中实现自动加载,但我遇到了一些问题,不知道为什么它不起作用。
我有一个基本的目录结构
/root
--bootstrap.php
--test.php
--/src
----/com
------/a
--------Foo.php
------/b
--------Bar.php
Bootstrap
<?php
function __autoload($class) {
// convert namespace to full file path
echo $class.'<br>';
$class = str_replace('\\', '/', $class) . '.php';
require_once($class);
}
文件
<?php
namespace src\com\a {
class Foo {
public function write() {
echo "write";
}
}
}
栏.php
<?php
use \src\com\a\Foo;
namespace src\com\b {
class Bar {
public function write() {
$foo = new Foo();
$foo->write();
}
}
}
测试.php
<?php
use \src\com\b\Bar;
require_once("bootstrap.php");
$bar = new Bar();
$bar->write();
所以基本前提是调用Bar,依次包含Foo并调用write方法
输出:
src\com\b\Bar
src\com\b\Foo
但是当我尝试自动加载时,它认为 Foo 位于 src/com/b 的命名空间中,因为那是 Bar 的命名空间,因此它不会加载。
有想法该怎么解决这个吗?
最佳答案
它看起来像 bar.php 应该:
<?php
namespace src\com\b;
use \src\com\a\Foo;
class Bar {
public function write() {
$foo = new Foo();
$foo->write();
}
}
?>
关于PHP不同的路径名空间和自动加载不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9350268/