我正在寻找最干净,最优雅的方式来构建操作系统安全的路径字符串在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);
型
1条答案
按热度按时间z9smfwbn1#
如果你的代码结构非常整洁,你可以只使用默认的自动加载实现,请参阅this page中的注解:
字符串
此方法将尝试从
nameofproject/src/controller/mycontroller.php
加载类NameOfProject\src\Controller\MyController
。