存储名称空间类在哪里?

时间:2015-05-03 22:11:41

标签: php namespaces autoload

我有PHP命名空间文件

namespace A\B\C
$cls = new foo();

foo 类存储在哪里?

OR如果存在 __ autoload()如何控制目录映射到命名空间?

感谢您的帮助。我试图更仔细地了解目录和命名空间之间的关系。 PHP和/或谷歌没有给我任何答案。

1 个答案:

答案 0 :(得分:1)

目录和名称空间之间没有直接关系,除非您使用自动加载器。

如果您希望此代码有效:

namespace A\B\C;
$cls = new foo();

你必须这样做:

namespace A\B\C;
class foo {}
$cls = new foo();

或者这样做:

<强> foo.php

namespace \A\B\C;

class foo {}

<强>的index.php

require 'foo.php';

$cls = new \A\B\C\foo();
// or
namespace A\B\C;
$cls = new foo();

现在,如果您想使用自动加载器,可以使用以下内容:

function autoload($class)
{
    $class = str_replace('\\', '/', $class);

    require_once __DIR__ . '/' . $class . '.php';
}
spl_autoload_register('autoload');

将这种代码放在index.php的顶部,然后像这样得到一个dir arch:

A
+ B
| + C
| | + foo.php

然后你必须这样做:

$cls = new \A\B\C\foo();

甚至:

use \A\B\C\foo;
$cls = new foo();

但无论如何,你必须阅读手册:Link here