PHP 교육에서 초보자 단계를 지나간 경우 PSR-0에 대해 들었습니다. PSR-0에 대해 들었습니다. 즉, 요구 사항 및 포함과 같은 문장을 사용하지 않고도 코드에 PHP 클래스를 자동으로 포함시키는 방법을 정의하는 자동로드 표준입니다.
PSR-0은 클래스의 네임 스페이스를보고 해당 정보에서 하드 드라이브의 위치를 식별합니다. 예를 들어, 클래스 \ zend \ mail \ message는 /path/to/project/lib/vendor/zend/mail/message.php.=&& 설정으로 이어집니다.
PSR-0은 또한 클래스 이름의 밑줄을 대안으로 지원하여 5.2 이상에서 더 쉽게 전환 할 수 있도록합니다. zend_mail_message는 또한/path/to/project/lib/vendor/zend/mail/message.php.=&&]로 이어집니다.작곡가
공급업체/ vendor_name/ package_name/ SRC/ vendor_name/ package_name/ classname.php # vendor_name \ package_name \ classname 테스트/ vendor_name/ package_name/ classnameTest.php # vendor_name \ package_name \ ClassnameTest
vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
"SRC"및 "Tests"디렉토리에는 공급 업체 및 패키지 디렉토리 이름을 포함해야합니다. 이것은 PSR-0 규정 준수의 아티팩트입니다.
따라서, 자격을 갖춘 PHP 개발자는 새로운 표준에 대한 제안을 모았습니다 : PSR-4.
psr-4
공급업체/ vendor_name/ package_name/ SRC/ classname.php # vendor_name \ package_name \ classname 테스트/ classnameTest.php # vendor_name \ package_name \ ClassnameTest
vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
PSR-0은 클래스 이름의 모든 부분 사이의 중보 경로를 허용하지 않기 때문에
이것은 매우 중요합니다-이는 PSR-4를 구현하는 것이 더 깨끗한 패키지를 허용하지만 구현하기가 훨씬 더 복잡하다는 것을 의미합니다. 우리는 PSR-4 패키지 지향 자동 로딩을 호출합니다. 단순성 전에 패키지 청결을 선호하기 때문입니다.
선택한 접근 방식
드래프트는 PSR-4 자동 로더가 예외를 던지지 않아야하거나 여러 오토 로더가 등록 될 수 있기 때문에 단순히 예외를 제외하지 않아야하거나 오류를 제기해서는 안되며, 클래스를로드하지 못하면 다른 사람들에게는 오류를 던지고 흐름을 중단해야합니다. 실패에 대한 추가 정보가 필요한 경우 PSR-3 호환 로거 또는 기타 임의의 수단을 사용해야합니다.
예제 파일에 표시된대로 PSR-4 자동 로더를 사용하여 다음 구조에서 클래스를로드합니다.
/path/to/packages/foo-bar/ SRC/ baz.php # foo \ bar \ baz qux/ quux.php # foo \ bar \ qux \ quux 테스트/ baztest.php # foo \ bar \ baztest qux/ quuxtest.php # foo \ bar \ qux \ quuxtest
:
/path/to/packages/foo-bar/ src/ Baz.php # Foo\Bar\Baz Qux/ Quux.php # Foo\Bar\Qux\Quux tests/ BazTest.php # Foo\Bar\BazTest Qux/ QuuxTest.php # Foo\Bar\Qux\QuuxTestphp // 로더를 인스턴스화합니다 $ loader = new \ example \ psr4autoloaderclass; // 자동 로더를 등록합니다 $ loader-> register (); // 네임 스페이스 접두사의 기본 디렉토리를 등록합니다 $ loader-> addnamespace ( 'foo \ bar', '/path/to/packages/foo-bar/src'); $ loader-> addnamespace ( 'foo \ bar', '/path/to/packages/foo-bar/tests');
새로운 \ foo \ bar \ qux \ quux를 호출하는 곳; New \ foo \ bar \ qux \ quuxtest; 두 번째로부터로드하려고 시도 할 것이다.
register(); // register the base directories for the namespace prefix $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/src'); $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/tests');이 예제는 단일 네임 스페이스 당 여러 폴더의 사용을 보여줍니다.
결론
자동 로딩에는 은색 총알이 없습니다. 각 접근 방식은 그 자체로 몇 가지 장단점을 제공합니다-PSR-4는 더 간단한 폴더 구조를 허용하지만, 완전히 자격을 갖춘 이름을 보면 클래스의 정확한 경로를 알지 못하게합니다. 반면에 PSR-0은 하드 드라이브에서는 혼란 스럽지만 과거에 갇힌 개발자 (클래스의 이름이없는 사용자)를 지원하고 이름을 보면서 수업의 위치를 분별하는 데 도움이됩니다.
어느 쪽이든-패키지 지향 자동 로딩이 여기에 있다는 것은 의심의 여지가 없습니다. 공식적으로 표준으로 받아 들여지지 않으면 필요한 사람들이 사용자 정의를 구현합니다. 토론에 참여 하고이 공식적인 상태에 도달 할만 큼 충분히 개념을 개선하는 것은 우리에게 달려 있습니다.
PSR-0 및 PSR-4 자동 로딩에 대한 자주 묻는 질문
PSR-0과 PSR-4의 주요 차이점은 무엇입니까? PSR-0은 네임 스페이스와 디렉토리 구조 사이의 직접적인 상관 관계가 필요합니다. 즉, 네임 스페이스의 각 밑줄이 디렉토리 분리기에 해당합니다. 반면, PSR-4는 네임 스페이스의 일부를 디렉토리에 매핑 할 수 있고 나머지 네임 스페이스는 하위 디렉토리 구조에 매핑 될 수있는보다 유연한 접근법을 허용합니다.
동일한 프로젝트에서 PSR-0과 PSR-4를 모두 사용할 수 있습니까? 그러나 동일한 클래스를 자동로드하는 데 사용해서는 안된다는 점에 유의해야합니다. 두 표준을 사용하면 일부 레거시 코드가 PSR-0 표준을 따르는 대규모 프로젝트에서 유리할 수 있으며, 최신 코드는 PSR-4 표준을 따릅니다.
PSR-4는 자동로드에 대한 융통성있는 접근 방식을 제공함으로써 PSR-0에서 개선됩니다. 이를 통해 개발자는 네임 스페이스의 일부를 모든 디렉토리에 매핑하여 깊은 디렉토리 중첩의 필요성을 줄일 수 있습니다. 이로 인해 프로젝트의 디렉토리 구조를보다 쉽게 관리하고 탐색 할 수 있습니다.
PSR-4에서 자동로드가 어떻게 작동합니까? 그런 다음 나머지 네임 스페이스는 하위 디렉토리 구조에 매핑됩니다. 이를 통해 자동로드에 대한보다 유연하고 효율적인 접근 방식이 가능합니다.
PSR-4는 자동로드에 대한보다 유연한 접근 방식, 깊은 디렉토리 중첩에 대한 요구 감소 및 개선 된 효율성을 포함하여 몇 가지 이점을 제공합니다. 또한 PHP의 자동로드에 권장되는 표준이므로 새로운 프로젝트에 적합한 선택입니다.
이전 PHP 버전에서 PSR-4를 사용할 수 있습니까? 이전 버전의 PHP를 사용하는 경우 PSR-4를 사용하기 위해 업그레이드해야합니다.
PHP의 미래는 계속 발전하고 있으며, 새로운 표준과 사례는 언어로 도입 될 가능성이 높으며 생태계는 EcoSystem이 발전 할 가능성이 높습니다. 그러나 가까운 미래에 PSR-4는 Php에서 자동로드에 권장되는 표준입니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3