阿尼!
還記得 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 標準系列的一部分。
以上是PSR-PHP 中的自動加載標準的詳細內容。更多資訊請關注PHP中文網其他相關文章!