0

我对 PHP 中的自动加载器和命名空间感到有些困惑。

我的课程组织在一个资产文件中,

-- Assets
    -- user
       -- User.php
    -- database
       -- Database.php

这只是一个简单的版本,每个文件夹中有更多的文件(即用户、数据库)。

无需担心供应商名称冲突,因为该项目中只有一个供应商(即我),但例如,使用 PSR0 自动加载器:

function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strripos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require $fileName;
}

我是否需要在每个类文件中声明一个命名空间并使用new user\User();. 是不是可以通过使用来初始化它new user_User;

非常感谢

4

1 回答 1

1

PSR-0 自动加载器约定不要求您使用映射到您的目录结构的命名空间。您也可以在类名中使用下划线来达到基本相同的目的。

与命名空间分隔符一样,类名中的\任何下划线都会在查找要加载的文件时转换为。因此,一个类和都会导致自动加载器寻找相同的文件:.DIRECTORY_SEPARATORuser_User\user\Useruser/User.php

于 2012-07-16T00:08:49.630 回答