ホームページ >バックエンド開発 >PHPチュートリアル >PHP の PSR オートローディング標準

PHP の PSR オートローディング標準

Barbara Streisand
Barbara Streisandオリジナル
2025-01-11 16:04:44360ブラウズ

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 実装)

以上がPHP の PSR オートローディング標準の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。