首頁 >後端開發 >php教程 >PSR-PHP 中的自動加載標準

PSR-PHP 中的自動加載標準

Barbara Streisand
Barbara Streisand原創
2025-01-11 16:04:44433瀏覽

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