해당 네임스페이스에 맵핑된 경로의PHP 파일을 클래스로드 해주는기능
require 해준다
클래스가 사용될때 클래스파일이 require되므로 Lazy loading이다
위의 이미지를 예제로 설명
composer.json의 Namespace1\\Namespace2\\Namespace3\\ 부분은 루트 네임스페이스이다
파일경로 src1/src2와 맵핑된다 ( 파일경로의 root폴더는 composer.json이 있는곳)
정의 파일(Main.php)에서는 루트 네임스페이스 + 추가 디렉토리를 사용한다
네임스페이스 Namespace1\\Namespace2\\Namespace3\\ == src1/src2인점을 고려
Namespace1\\Namespace2\\Namespace3\\ + src3(추가 디렉토리)
namespace Namespace1\Namespace2\Namespace3\src3;
실행파일(Test.php)에서 아래의 네임스페이스를 사용한다
use Namespace1\Namespace2\Namespace3\src3\Main;
composer를 아래명령어로 적용한다
autoload_psr4.php에 적혀있는 namespace정보가 갱신되므로 composer.json의 namespace를 수정시 아래의 명령어를 실행해서 갱신해줘야함
composer dump-autoload
그리고 참고로 클래스명과 파일명은 일치해야한다 (Main.php == Main class)
20230628 추가
라라벨에 내가 만든 패키지를 추가하는법
laravel/packages/패키지명/src폴더와 composer.json 추가
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