gpt4 book ai didi

PHP 自动加载器和命名空间

转载 作者:行者123 更新时间:2023-12-04 17:04:41 25 4
gpt4 key购买 nike

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

我的类(class)组织在一个 Assets 文件中,

-- 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查找要加载的文件时。所以,一个类(class)user_User\user\User两者都会导致自动加载器寻找相同的文件:user/User.php .

关于PHP 自动加载器和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com