안녕!
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를 사용합니다.
라라벨 예:
<code class="language-php"><?php namespace App\Http\Controllers; class BlogController extends Controller { public function index() { return view('blog.index'); } }</code>
심포니 예:
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!