阿尼!
还记得 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中文网其他相关文章!