]
psr-0PSR-0 также поддерживает недостатки в именах классов в качестве альтернативы, чтобы облегчить переход с 5.2 и раньше. Zend_mail_message также приведет к /пат/to/project/lib/vendor/zend/mail/message.php.try&&&]]
Композитор, когда Composer появился и взял мир управления пакетами PHP, все изменилось. Из-за некоторых его правил папки часто дублировались и становятся слишком глубокими, если смотреть на установки класса PSR-0 через композитор. Например, некоторые структуры папок оказались таковыми:
это в лучшем случае хаотично, потому что:
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» и «Тесты» должны включать имена каталогов поставщиков и пакетов. Это артефакт соответствия PSR-0.
]]PSR-4поэтому некоторые высококвалифицированные разработчики PHP собрались и собрали предложение для нового стандарта: PSR-4.
]
PSR-4 стремится дополнить и работать вместе с PSR-0, где это необходимо, не полностью заменить его. Это может, но не должно. Основной целью PSR-4 является удаление остатков PSR-0 и полностью до 5,3 дней, а также обеспечить более краткую структуру папок. С PSR-4 приведенное выше дерево папок будет выглядеть следующим образом:
модернизация PSR-0 не была опцией
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]
, потому что PSR-0 не допускает ходатайства между любыми частями имени класса
]выбранный подходэто очень важно-это означает, что реализация PSR-4, одновременно обеспечивать гораздо более чистые пакеты, будет гораздо сложнее реализовать. Мы называем PSR-4, ориентированную на пакет, автозагрузку, потому что она способствует чистоте упаковки перед простотой.
]
Предлагаемые цели заключаются в следующем: сохранить правило PSR-0, которое все пакеты должны содержать как минимум два уровня пространства имен (поставщик и упаковка), убедитесь, что комбинация поставщика пакетов может составить карту в любую папку и разрешить инфикс папок между комбо-пакетом поставщика и остальным именем полностью квалифицированного класса.
, кроме того, в проекте явно указывается, что автозазагрузка 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\QuuxTest
, где вызов New \ foo \ bar \ qux \ quux; попытался загрузить из первого зарегистрированного каталога, в то время как новый \ 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 AutoLoading
]] каково основное различие между PSR-0 и PSR-4? PSR-0 требует прямой корреляции между пространствами имен и структурой каталогов, что означает, что каждый подчеркивается в пространстве имен соответствует сепаратору каталога. С другой стороны, PSR-4 допускает более гибкий подход, когда часть пространства имен может быть сопоставлена с каким-либо каталогом, а остальная часть пространства имен может быть сопоставлена с подкаканом. Строгая корреляция PSR-0 между пространствами имен и структурой каталогов привела к глубоко вложенным каталогам, что не всегда было практичным или эффективным. PSR-4 обеспечивает более гибкий подход, позволяющий разработчикам отображать пространства имен в любом каталоге, уменьшая необходимость в гнездование глубокого каталога.
PSR-0 устарел? Это означает, что, хотя он все еще функционален, он не рекомендуется для использования в новых проектах. PSR-4-это рекомендуемый стандарт для автозагрузки в PHP.
в PSR-4, автозагружая работает, отображая часть пространства имен с каким-либо каталогом. Остальная часть пространства имен затем отображается в подкаталярную структуру. Это допускает более гибкий и эффективный подход к автозагрузке.
PSR-4 предлагают несколько преимуществ, включая более гибкий подход к автозагрузке, уменьшенную потребность в гнездование глубокого каталогов и повышенную эффективность. Это также рекомендуемый стандарт для автозагрузки в PHP, что делает его хорошим выбором для новых проектов.
Могу ли я использовать PSR-4 в более старых версиях PHP?
, какое будущее автозагрузки в PHP?
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3