Intereting Posts
Динамически создавать PHP-объект на основе строки PHPMailer с GMail: ошибка SMTP Шаблон проектирования для внедрения плагинов в приложениях PHP PHP DateTime :: изменить время добавления и вычитания Установка HTML-фрейма src на google.com; не работает Как мне создать sms-сервис? Yii2: Как показать проверенные значения в CheckboxList Синтаксис для инструкции if / else, если вставка была успешной в подготовленном заявлении PDO Используя PHP (curl), чтобы извлекать данные из JSON (API Карт Google) Как сохранить эту строку в PHP? Ошибка при попытке использовать гибридный поток входа в Google OAuth 2.0 (Google_IO_Exception) с сообщением «Ошибка HTTP: невозможно подключиться:« 0 ») Что такое <<< _ END? Контейнер Dependecy Injection не работает в Fixtures после обновления symfony 2.0 до 2.1 / 2.2 API-интерфейс Google Analytics PHP (GAPI). Получение количества просмотров страниц. Избегайте повторения уведомлений по электронной почте о некоторых завершенных заказах

В чем разница между PSR-0 и PSR-4?

Я недавно прочитал об пространствах имен и о том, как они полезны.

Я создаю проект в Laravel и пытаюсь перейти от автозагрузки классов к пространству имен.

Я не могу понять, какова фактическая разница между PSR-0 и PSR-4. Некоторые ресурсы, которые я прочитал, являются

  • Битва автопогрузчиков
  • Автозагрузка Laracasts PSR-4
  • PSR-0
  • PSR-4

Я понимаю:

  • PSR-4 не преобразует символы подчеркивания в разделители каталогов
  • Некоторые специфические правила композитора вызывают сложность структуры каталогов, что, в свою очередь, расширяет пространство имен PSR-0 и, следовательно, PSR-4

Примеры, объясняющие разницу, будут оценены.

Они очень похожи, поэтому неудивительно, что это немного запутанно. Резюме состоит в том, что PSR-0 имеет некоторые функции обратной совместимости для названий классов в стиле PEAR, которые PSR-4 отбрасывал, поэтому он поддерживает только код с расширением имен. Кроме того PSR-4 не заставит вас есть все пространство имен, структуру каталогов, но только часть следующей точки привязки.

Например, если вы определите, что пространство имен Acme\Foo\ закреплено в src/ , с PSR-0 это означает, что он будет искать Acme\Foo\Bar в src/Acme/Foo/Bar.php тогда как в PSR-4 он будет ищите его в src/Bar.php , что позволяет использовать более короткие структуры каталогов. С другой стороны, некоторые предпочитают иметь полную структуру каталогов, чтобы четко видеть, что такое пространство имен, поэтому вы также можете сказать, что Acme\Foo\ находится в src/Acme/Foo с PSR-4, что даст вам эквивалент Поведение PSR-0, описанное выше.

Короче говоря, для новых проектов и для большинства целей и целей вы можете использовать PSR-4 и забыть о PSR-0.

Вот основные отличия,

1. Например, если вы определяете, что пространство имен Acme\Foo\ закреплено в src/ ,

  • с PSR-0 это означает, что он будет искать Acme\Foo\Bar в src/Acme/Foo/Bar.php
  • в PSR-4 он будет искать Acme\Foo\Bar в src/Bar.php(where Bar class is) .

2. PSR-4 не преобразует символы подчеркивания в разделители каталогов

3. Вы не можете использовать PSR-4, если вы не используете пространства имен

4. PSR-0 не будет работать, даже если имя класса отличается от имени файла, например, рассмотрев вышеприведенный пример:

  • Acme\Foo\Bar —> src/Acme/Foo/Bar.php (для класса Bar) будет работать
  • Acme\Foo\Bar —> src/Acme/Foo/Bar2.php (для класса Bar) не будет работать

PSR-4 – это что-то вроде «относительного пути», PSR-0, «абсолютный путь».

например

конфигурации:

 'App\Controller' => 'dir/' 

Автозагрузка PSR-0 :

 App\Controller\IndexController --> dir/App/Controller/IndexController.php 

Автозагрузка PSR-4 :

 App\Controller\IndexController --> dir/IndexController.php 

И есть еще несколько различий в деталях между PSR-0 и PSR-4, см. Здесь: http://www.php-fig.org/psr/psr-4/