PHP不同的路径名空间和自动加载不起作用

标签 php namespaces php-5.3 autoload

我正在尝试使用命名空间在 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/

相关文章:

php - 在 IE7 中刷新或清除 Ajax "temp"内容的最佳方法

javascript - AJAX 表单未提交或执行任何操作

python - 将文件加载到变量中

c++ - 类命名空间内的模板特化

xml - xpath-默认命名空间 : matching nodes from loaded XML without namespace

php - 从 call_user_func() 调用时,array_pop() 需要弃用的按引用调用

PHP天差计算错误

php - PDO插入语句不起作用

javascript - 使用URL.createObjectURL()处理来自数据库的Blob图像

php - 我应该如何在 CodeIgniter 中散列密码