我对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 userUser();
初始化一个类。是否无法使用new user_User;
初始化
非常感谢
PSR-0自动加载器约定不要求使用映射到目录结构的命名空间。您也可以在类名中使用下划线来达到基本相同的目的。
与命名空间分隔符一样,在查找要加载的文件时,类名中的任何下划线都将转换为
DIRECTORY_SEPARATOR
。因此,类user_User
和userUser
都会导致自动加载器查找相同的文件:user/User.php
。