首页 >后端开发 >php教程 >PSR-PHP 中的自动加载标准

PSR-PHP 中的自动加载标准

Barbara Streisand
Barbara Streisand原创
2025-01-11 16:04:44413浏览

PSR-Autoloading Standard in PHP

阿尼!

还记得 PHP 手册require天吗? 上周,我帮助一个团队升级了他们的旧版应用程序 - 每个文件超过 50 个 require 语句! 让我们看看 PSR-4 自动加载如何解决这个问题。

了解 PSR-4(5 分钟)

PSR-4 是代码的自动文件定位器。 就像使用地址的 GPS 一样,PSR-4 使用命名空间来查找类。

关键概念(2 分钟)

  1. 完全限定类名称 (FQCN): VendorPackageClass。 将其视为您班级的完整地址。
  2. 目录结构:组织良好的项目目录,具有命名空间到目录的映射。

真实示例(10 分钟)

项目结构:

<code>vendor/
└── jonesrussell/
    └── blog/
        ├── composer.json
        └── src/
            └── Post/
                ├── PostController.php
                └── PostRepository.php</code>

设置 Composer(3 分钟)

composer.json:

<code class="language-json">{
    "name": "jonesrussell/blog",
    "autoload": {
        "psr-4": {
            "JonesRussell\Blog\": "src/"
        }
    }
}</code>

创建类(2 分钟)

PostController.php:

<code class="language-php"><?php

namespace JonesRussell\Blog\Post;

class PostController
{
    public function index()
    {
        return ['status' => 'Ready to blog!'];
    }
}</code>

常见模式(5 分钟)

多个命名空间根:

<code class="language-json">{
    "autoload": {
        "psr-4": {
            "JonesRussell\Blog\": "src/",
            "JonesRussell\Blog\Tests\": "tests/"
        }
    }
}</code>

嵌套命名空间:(文件位置:src/Core/Database/Connection.php

<code class="language-php"><?php

namespace JonesRussell\Blog\Core\Database;

class Connection
{
    private $config;

    public function __construct(array $config)
    {
        $this->config = $config;
    }
}</code>

框架示例(5 分钟)

Laravel 和 Symfony 默认使用 PSR-4。

Laravel 示例:

<code class="language-php"><?php

namespace App\Http\Controllers;

class BlogController extends Controller
{
    public function index()
    {
        return view('blog.index');
    }
}</code>

Symfony 示例:

<code class="language-php"><?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class BlogController extends AbstractController
{
    public function index(): Response
    {
        return $this->render('blog/index.html.twig');
    }
}</code>

故障排除(3 分钟)

  • “找不到类”错误:运行composer dump-autoload
  • 目录结构问题:确保您的目录结构与您的命名空间匹配(区分大小写!)。

测试(2 分钟)

创建test-autoload.php:

<code class="language-php"><?php

require 'vendor/autoload.php';

$controller = new \JonesRussell\Blog\Post\PostController();
var_dump($controller->index()); // Should output "Ready to blog!"</code>

后续步骤

接下来,我们将介绍 PSR-6(缓存)。这是我们 PSR 标准系列的一部分。

资源

  • 官方 PSR-4 规范
  • Composer 自动加载文档
  • 系列示例存储库(v0.3.0 - PSR-4 实现)

以上是PSR-PHP 中的自动加载标准的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn