>백엔드 개발 >PHP 튜토리얼 >PHP의 PSR 자동 로딩 표준

PHP의 PSR 자동 로딩 표준

Barbara Streisand
Barbara Streisand원래의
2025-01-11 16:04:44364검색

PSR-Autoloading Standard in PHP

안녕!

PHP 매뉴얼 require 시절을 기억하시나요? 지난주에 저는 한 팀의 레거시 앱 업그레이드를 도왔습니다. 파일당 50개 이상의 require 문이 있었습니다! PSR-4 자동 로딩이 이 문제를 어떻게 해결하는지 살펴보겠습니다.

PSR-4 이해(5분)

PSR-4는 코드의 자동 파일 찾기입니다. 주소를 사용하는 GPS와 마찬가지로 PSR-4는 네임스페이스를 사용하여 클래스를 찾습니다.

핵심 개념(2분)

  1. 정규화된 클래스 이름(FQCN): VendorPackageClass. 수업의 전체 주소라고 생각하세요.
  2. 디렉터리 구조: 네임스페이스-디렉터리 매핑으로 잘 구성된 프로젝트 디렉터리.

실제 사례(10분)

프로젝트 구조:

<code>vendor/
└── jonesrussell/
    └── blog/
        ├── composer.json
        └── src/
            └── Post/
                ├── PostController.php
                └── PostRepository.php</code>

Composer 설정(3분)

composer.json:

<code class="language-json">{
    "name": "jonesrussell/blog",
    "autoload": {
        "psr-4": {
            "JonesRussell\Blog\": "src/"
        }
    }
}</code>

수업 만들기(2분)

PostController.php:

<code class="language-php"><?php

namespace JonesRussell\Blog\Post;

class PostController
{
    public function index()
    {
        return ['status' => 'Ready to blog!'];
    }
}</code>

공통 패턴(5분)

여러 네임스페이스 루트:

<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>

프레임워크 예(5분)

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>

문제 해결(3분)

  • "클래스를 찾을 수 없음" 오류: composer dump-autoload을 실행하세요.
  • 디렉터리 구조 문제: 디렉터리 구조가 네임스페이스와 일치하는지 확인하세요(대소문자 구분!).

테스트(2분)

만들기 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-4 공식 사양
  • Composer 자동 로딩 문서
  • 시리즈 예제 저장소(v0.3.0 - PSR-4 구현)

위 내용은 PHP의 PSR 자동 로딩 표준의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.