PHP自动加载器和命名空间


PHP autoloaders and namespaces

我对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; 初始化

非常感谢

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

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