我正在尝试更改我之前编写的自动加载系统。 我正在使用作曲家,目前我只使用类地图自动加载一个库。
"autoload": {
"classmap": ["libs/"]
}
我想为其余的文件添加一个psr-4加载器,并且能够在没有命名空间的情况下调用libs下的文件,并且不需要使用"使用"他们'有点像laravel中的别名。这就是我想要做的事情:
"autoload": {
"classmap": ["libs/"],
"psr-4": {
"App\\": ""
}
}
所以最终如果在" libs"我有Session类我称之为:
Session::get('anything')
但现在尝试添加psr-4并从命名空间类
中调用它namespace App\models;
Class User{
function get(){
return Session::get('anything');
}
}
它不再工作,因为它在用户的命名空间中查找会话。 我知道有很多框架使用别名来实现它的开箱即用..它只是这个项目有点老了我试图组织它并摆脱所有需求随处可见 - 目前必须要求每个模型。
答案 0 :(得分:0)
我想为其余文件添加一个psr-4加载器,并且能够在没有名称空间的情况下调用libs下的文件,并且不会“使用”它们类似于laravel中的别名。
如果没有添加use
或添加以反斜杠\
开头的完全限定的命名空间路径,则无法使用这些类。这与加载这些类的方式无关,但这是PHP本身的基本要求 - 因此无论您如何设计自动加载,都无法解决这个问题。
如评论所述,添加反斜杠有效,但这是必需的最小值:
namespace App\models;
Class User{
function get(){
return \Session::get('anything');
}
}
答案 1 :(得分:0)
我最后写了另一个类别,这个类别对我想要的所有类别进行别名处理,因此我可以将它们称为开箱即用。
你可以在这里看到它:https://github.com/shahafan/SAmvc-App/blob/master/Config/Aliases.php
基本上我只是使用php class_alias函数,所以我可以在使用之前加载我想要的所有类。 我认为laravel也是这样做的。