ホームページ >バックエンド開発 >PHPチュートリアル >PHP の PSR オートローディング標準
あにぃ!
PHP マニュアル require
の時代を覚えていますか? 先週、私はチームのレガシー アプリのアップグレードを支援しました。ファイルごとに 50 を超える require
ステートメントが含まれていました。 PSR-4 の自動ロードがこれをどのように解決するかを見てみましょう。
PSR-4 はコードの自動ファイル ロケーターです。 住所を使用する GPS と同様に、PSR-4 は名前空間を使用してクラスを検索します。
VendorPackageClass
。 これはクラスの完全なアドレスであると考えてください。プロジェクトの構造:
<code>vendor/ └── jonesrussell/ └── blog/ ├── composer.json └── src/ └── Post/ ├── PostController.php └── PostRepository.php</code>
composer.json
:
<code class="language-json">{ "name": "jonesrussell/blog", "autoload": { "psr-4": { "JonesRussell\Blog\": "src/" } } }</code>
PostController.php
:
<code class="language-php"><?php namespace JonesRussell\Blog\Post; class PostController { public function index() { return ['status' => 'Ready to blog!']; } }</code>
複数の名前空間ルート:
<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>
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>
composer dump-autoload
.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 標準シリーズの一部です。
以上がPHP の PSR オートローディング標準の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。