Ahnii !
Vous vous souvenez du manuel PHP require
jours ? La semaine dernière, j'ai aidé une équipe à mettre à niveau son ancienne application – plus de 50 require
déclarations par fichier ! Voyons comment le chargement automatique du PSR-4 résout ce problème.
PSR-4 est le localisateur automatique de fichiers de votre code. Comme un GPS utilisant des adresses, PSR-4 utilise des espaces de noms pour trouver des classes.
VendorPackageClass
. Considérez-le comme l'adresse complète de votre classe.Structure du projet :
<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>
Racines d'espace de noms multiples :
<code class="language-json">{ "autoload": { "psr-4": { "JonesRussell\Blog\": "src/", "JonesRussell\Blog\Tests\": "tests/" } } }</code>
Espaces de noms imbriqués : (Emplacement du fichier : 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 et Symfony utilisent PSR-4 par défaut.
Exemple Laravel :
<code class="language-php"><?php namespace App\Http\Controllers; class BlogController extends Controller { public function index() { return view('blog.index'); } }</code>
Exemple 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
.Créer 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>
Ensuite, nous aborderons le PSR-6 (mise en cache). Cela fait partie de notre série de normes PSR.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!