Psr-4의 autoload에 대해서 정리



해당 네임스페이스에 맵핑된 경로의PHP 파일을 클래스로드 해주는기능

  • require 해준다

  • 클래스가 사용될때 클래스파일이 require되므로 Lazy loading이다


위의 이미지를 예제로 설명

  1. composer.json의 Namespace1\\Namespace2\\Namespace3\\ 부분은 루트 네임스페이스이다

    파일경로 src1/src2와 맵핑된다 ( 파일경로의 root폴더는 composer.json이 있는곳)

  2. 정의 파일(Main.php)에서는 루트 네임스페이스 + 추가 디렉토리를 사용한다

    • 네임스페이스 Namespace1\\Namespace2\\Namespace3\\ == src1/src2인점을 고려

    • Namespace1\\Namespace2\\Namespace3\\ + src3(추가 디렉토리)

      namespace Namespace1\Namespace2\Namespace3\src3;
  3. 실행파일(Test.php)에서 아래의 네임스페이스를 사용한다

    use Namespace1\Namespace2\Namespace3\src3\Main;
  4. composer를 아래명령어로 적용한다

    autoload_psr4.php에 적혀있는 namespace정보가 갱신되므로 composer.json의 namespace를 수정시 아래의 명령어를 실행해서 갱신해줘야함

    composer dump-autoload
  5. 그리고 참고로 클래스명과 파일명은 일치해야한다 (Main.php == Main class)


20230628 추가

라라벨에 내가 만든 패키지를 추가하는법

  1. laravel/packages/패키지명/src폴더와 composer.json 추가

  2. laravel/composer.json 안에 repositories항목안에 1에서 기입한 내용을 추가

    require 항목안에도 패키지명을 기입


202308009 추가

composer dump-autoload 명령어에 대해서 추가 설명

composer dump-autoload 명령어는 프로젝트에서 composer로 설치한 패키지의 클래스를 불러올때 필요한 맵을 업데이트하는 명령어다.

즉 새로운 패키지를 설치하고 사용하는 경우 use 패키지경로/클래스명 으로 사용하는데 추가한 패키지가 autoload되어 있지 않으므로 해당 경로의 추가한 패키지를 사용할수없다.

그래서 수동으로 autoload해서 맵핑이 필요한것이다




참조

https://studyposting.tistory.com/54

https://m.blog.naver.com/songxue7777/221245236015

May 19, 2023 Views 164