PSR-0
PSR-0 também suporta sublinhados nos nomes de classe como alternativa, para facilitar a transição de 5.2 e mais cedo. Zend_Mail_Message também levaria a /path/to/project/lib/vendor/zend/mail/message.php.
Compositor
Vendor/ vendor_name/ package_name/ src/ Vendor_name/ Package_name/ ClassName.php # vendor_name \ package_name \ className testes/ 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\ClassNameTestIsso é caótico na melhor das hipóteses, porque:
Os diretórios "SRC" e "Testes" precisam incluir nomes de fornecedor e diretório de pacotes. Este é um artefato de conformidade PSR-0.Portanto, alguns desenvolvedores PHP altamente qualificados se reuniram e montaram uma sugestão para um novo padrão: PSR-4.
PSR-4
Vendor/ vendor_name/ package_name/ src/ ClassName.php # vendor_name \ package_name \ className testes/ 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
porque o PSR-0 não permite um caminho intercessorial entre qualquer parte do nome da classe
Isso é muito importante-significa que a implementação do PSR-4, enquanto permitir pacotes muito mais limpos, seria muito mais complicada de implementar. Chamamos o pacote de pacote PSR-4, porque favorece a limpeza do pacote antes da simplicidade.
A abordagem escolhida
Além disso, o rascunho afirma explicitamente que um automóvel PSR-4 nunca deve lançar exceções ou levantar erros simplesmente porque vários automóveis podem ser registrados e, se alguém não conseguir carregar uma classe, outros devem ter a chance de fazê-lo-lançando um erro e interrompem a quebra de fluxo. Se forem necessárias informações adicionais sobre a falha, deve-se usar um Logger compatível com PSR-3 ou outros meios arbitrários.
Como ilustrado no arquivo de exemplo, usando o Autoloader PSR-4 para carregar classes da seguinte estrutura:
/path/to/packages/foo-bar/ src/ Baz.php # foo \ bar \ baz Qux/ Quux.php # foo \ bar \ qux \ quux testes/ Baztest.php # foo \ bar \ baztest Qux/ Quuxtest.php # foo \ bar \ qux \ quuxtest
seria assim:
/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 // instanciar o carregador $ carregador = new \ exemplo \ psr4autoloaderclass; // Registre o automóvel $ carregador-> register (); // Registre os diretórios da base para o prefixo do espaço para nome $ carregador-> addNamespace ('foo \ bar', '/path/to/packages/foo-bar/src'); $ carregador-> addNamespace ('foo \ bar', '/path/to/packages/foo-bar/tests');
onde chamando new \ foo \ bar \ qux \ quase; tentaria carregar a partir do primeiro diretório registrado, enquanto novo \ foo \ bar \ qux \ quuxtest; tentaria carregar a partir do segundo.
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\ClassNameTestEste exemplo também ilustra o uso de várias pastas por espaço para nome único.
Conclusão
não há bala de prata no automobilismo automático. Cada abordagem traz consigo alguns prós e contras-o PSR-4 permitiria estruturas de pastas mais simples, mas nos impediriam de saber o caminho exato de uma classe apenas olhando para o nome totalmente qualificado. O PSR-0, por outro lado, é caótico no disco rígido, mas suporta os desenvolvedores que estão presos no passado (os usuários do nome da categoria) e nos ajuda a discernir a localização de uma aula apenas olhando seu nome.
de qualquer maneira-não há dúvida de que o carregamento automático orientado para o pacote está aqui para ficar. Se não for formalmente aceito como padrão, então implementado personalizado por pessoas que precisam. Cabe a nós participar da discussão e melhorar a noção o suficiente para alcançar esse estado formal.
perguntas frequentes sobre PSR-0 e PSR-4 AutoLoading
Qual é a principal diferença entre o PSR-0 e o PSR-4? O PSR-0 requer uma correlação direta entre os espaços para nome e a estrutura do diretório, o que significa que cada sublinhado no espaço de nome corresponde a um separador de diretório. Por outro lado, o PSR-4 permite uma abordagem mais flexível, onde uma parte do espaço para nome pode ser mapeada para qualquer diretório, e o restante do espaço para nome pode ser mapeado para a estrutura do subdiretório. A estrita correlação do PSR-0 entre espaços para nome e estrutura de diretórios levou a diretórios profundamente aninhados, o que nem sempre foi prático ou eficiente. Os desenvolvedores fornecem uma abordagem mais flexível, permitindo que os namespaces do PS PS para qualquer diretório, reduzindo a necessidade de ninho de diretório profundo. No entanto, é importante observar que eles não devem ser usados para automaticamente as mesmas classes. O uso de ambos os padrões pode ser benéfico em grandes projetos, onde algum código legado segue o padrão PSR-0, enquanto o código mais recente segue o padrão PSR-4. Ele permite que os desenvolvedores mapeem uma parte do espaço para nome de qualquer diretório, reduzindo a necessidade de nidificação de diretório profundo. Isso facilita o gerenciamento e a navegação da estrutura de diretório do projeto. Isso significa que, embora ainda esteja funcional, não é recomendado para uso em novos projetos. O PSR-4 é o padrão recomendado para a carga automática no PHP.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3