php 我如何正确地自动加载类OS安全与命名空间?

hfyxw5xn  于 12个月前  发布在  PHP
关注(0)|答案(1)|浏览(102)

我正在寻找最干净,最优雅的方式来构建操作系统安全的路径字符串在PHP 8中,并将它们包含在我的自动加载函数中,如果可能的话,没有str_replace()substr()
我有一个这样的文件结构:

NameOfProject
├──(...)
├──src
|  ├──Controller
|  |  └──(...)
|  ├──Helper
|  |  └──(...)
|  ├──Model
|  |  └──(...)
|  ├──View
|  |  └──(...)
└──index.php

字符串
src文件夹中的每个类都有相应的命名空间,例如NameOfProject\src\Controller。我想使用spl_autoload_register()函数自动加载每个类。
这是我的代码:

<?php
//index.php

spl_autoload_register(function($class)
{
  include
    dirname(__FILE__, 2)
    .'/'
    .str_replace('\\', '/', $class)
    .'.php';
});


我想知道是否有一种更优雅的方法来避免使用str_replace(),但是如果没有它,路径字符串的串联就无法工作,因为$class总是返回名称空间(带反斜杠)而不是实际路径。
我读到PHP已经在函数中将正斜杠/转换为DIRECTORY_SEPARATOR,但我记得我过去只使用正斜杠时有一个问题。
如果str_replace()必须在那里,也许使用DIRECTORY_SEPARATOR是合适的?像这样:

str_replace('\\', DIRECTORY_SEPARATOR, $class)


我也考虑过将类名从$class中去掉,但这也需要一个“丑陋的”substr()

$class = substr($class, strrpos($class, "\\") + 1);

z9smfwbn

z9smfwbn1#

如果你的代码结构非常整洁,你可以只使用默认的自动加载实现,请参阅this page中的注解:

set_include_path('parent folder of NameOfProject');
spl_autoload_register();

字符串
此方法将尝试从nameofproject/src/controller/mycontroller.php加载类NameOfProject\src\Controller\MyController

相关问题