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

发布于 2025-01-07 05:30:01 字数 1199 浏览 0 评论 0原文

我正在尝试使用命名空间在 Php5.3 中实现自动加载,但我遇到了一些问题,并且不知道为什么它不起作用。

的基本目录结构

/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();

,所以基本前提是调用 Bar,它依次包含 Foo 并调用 write 方法

输出:

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

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

关于如何解决这个问题有什么想法吗?

I'm trying to implement autoloading in Php5.3 using namespaces but I'm having some issues and don't know why it's not working.

I have a basic directory structure of

/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();

So the basic premise is call Bar, which in turn includes Foo and calls the write method

output:

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

But when I try and autoload it thinks Foo is in the namespace of src/com/b because that is the namespace of Bar and therefore it doesn't load.

Any ideas on how to fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晨敛清荷 2025-01-14 05:30:01

看起来 bar.php 应该是:

<?php


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

    class Bar {

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

?>

It looks like bar.php should be:

<?php


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

    class Bar {

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

?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文