![](/img/trans.png)
[英]Why use a PSR-0 or PSR-4 autoload in composer if classmap is actually faster?
[英]composer autoload classmap with psr-4
我正在尝试更改我之前编写的自动加载系统。 我正在使用composer,目前仅使用类映射自动加载一个库。
"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');
}
}
它不再起作用,因为它在用户名称空间内寻找会话。 我知道有很多框架可以使用别名直接实现它。.,只是这个项目有点旧,我正在尝试对其进行组织,以消除所有地方的所有需求-目前每个模型必须。
我想为其余文件添加psr-4加载程序,并能够在libs下调用文件而没有名称空间,也无需在laravel中像别名一样“使用”它们。
您不能使用类而不添加use
或添加以反斜杠\\
开头的完全限定名称空间路径。 这与加载这些类的方式无关,但这是PHP本身的基本要求-因此,无论您如何设计自动加载,都无法解决。
如前所述,添加反斜杠是可行的,但这是必需的最低要求:
namespace App\models;
Class User{
function get(){
return \Session::get('anything');
}
}
我最终写了另一个类,该类为我想要的任何类提供别名,这样我就可以立即调用它们。
在这里你可以看到它:
https://github.com/shahafan/SAmvc-App/blob/master/Config/Aliases.php
基本上我只是在使用php class_alias函数,所以我可以在使用它们之前加载我想要的所有类。 我认为laravel以相同的方式进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.