【问题标题】:PHP different path names spaces and autoloading not workingPHP不同的路径名称空间和自动加载不起作用
【发布时间】:2012-03-10 03:39:35
【问题描述】:

我正在尝试使用命名空间在 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 的命名空间,因此它不会加载。

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: php namespaces php-5.3 autoload


    【解决方案1】:

    看起来 bar.php 应该是:

    <?php
    
    
    namespace src\com\b;
    use \src\com\a\Foo;
    
        class Bar {
    
            public function write() {
                $foo = new Foo();
                $foo->write();
            }
        }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 2021-06-29
      • 2011-08-06
      • 2015-07-15
      • 2012-05-21
      相关资源
      最近更新 更多