通过 Composer 使用 PSR4 自动加载与 spl_autoload_register

Nag*_*hab 5 php composer-php psr-4

我们正在构建一个新的 Slim 应用程序,并且希望在代码中使用 PSR4-Autoloading 和命名空间。

我们通过 Composer 找到了两种方法来做到这一点,即:

"autoload": {
    "psr-4": {
        "App\\Controller\\": "app/controllers",
        "App\\Middleware\\": "app/middleware",
        "App\\Model\\": "app/models"     
    }
},
Run Code Online (Sandbox Code Playgroud)

或者通过spl_autoload_register即:

spl_autoload_register(function ($class_name) {

  $filename = __DIR__ . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $class_name) . '.php';
  require $filename;

});
Run Code Online (Sandbox Code Playgroud)

是什么决定了我们应该采用哪种方法?

jma*_*eis 4

的版本spl_autoload_register可能会更快,因为它直接适合您。但是因为您使用 Composer 来自动加载依赖项,所以您的版本可能会与 Composer 实现一样快甚至更慢。

有一个原则叫做“不要重复自己”,既然 Composer 的人已经考虑并实施了它,那为什么还要创造新的东西呢?

话虽这么说,Composer 也在spl_autoload_register内部使用

结论:使用 Composer psr-4 自动加载,它可能比您的实现更强大,并且在性能方面同样快速。