2017-01-03 4 views

ответ

2
  1. Какова логика автозагрузки композитора?
  2. Как это отобразить пространство имен в определенный файл?
  3. Почему нам всегда нужно использовать пространство имен этого класса?

Ответы: 3. Во многих языках программирования пространство имена используется для отдельных классов, которые имеют такое же имя, но другую иерархия - лучший пример для этого Eloquent Builder и Query Builder. Ну, подумайте, что это как-то вроде «путь к файлу», как на вашем жестком диске, скажем, файл с именем b.txt в каталоге dir-a и dir-b, но они сохраняют собственное содержание? Во всяком случае, не больно читать the php documentation regarding namespace

(1, 2). Composer читает composer.json, чтобы проверить, какой путь представляет пространство имен, и перечислите каждые php-файлы в нем и сохраните их в autoload_*.php (если вы спросите меня, где находится файл, он только внутри вашего /vendor/composer/ все с autoload в начале его названия. Laravel - или, вернее, Composer - знает, как их загрузить и где они находятся через эти файлы. Если вы проверите файлы, у вас появится идея. only соглашение в автозагрузке Composer, которое вам нужно запомнить, - это единственный файл только для один класс и его имя класса должны быть точными с именем файла (без php-части - да, это связано с PSR-*)

ps. исправьте меня, если я неправильно.

+0

Как он читает используемое пространство имен и как оно преобразует его в путь? Он читает файл как текст, а затем находит ключевое слово «use»? – bruce

+0

относительно ключевого слова 'use' и' namespace' строго соответствует php. Composer обрабатывает только пространство имен, в котором находится путь к файлу, содержит классы и т. Д. - он только перечисляет их, [пример] (https://bitbucket.org/BagusTesa/ashadi-delivery-system-ads/src/f4bfdca18e87b3c38b802359b3c30db45d99ba2e/vendor/composer /autoload_classmap.php?at=master&fileviewer=file-view-default). –

+0

Да, но если я не использую 'use', он говорит, что класс не найден. Это означает, что каким-то образом он преобразуется в полный путь через логику. – bruce

1

Предположим, вы используете только autoload, это означает, что он не имеет области действия (namespace).

Это означает, что если вы когда-либо устанавливали зависимые стороны сторонних классов с тем же именем в папке поставщика (скорее всего, там будет), возникнет конфликт, который приведет к ошибке, фатальной для ваших приложений.

Класс автоподачи класса композитора также соответствует PSR-4 Standards.

Как Composer отображает файлы?

Это указывается в файле composer.json, например:

{ 
    "autoload": { 
     "psr-4": { 
      "App\\": "src/" 
     } 
    } 
} 

App будет пространство имен, и src будет папка

Это также полезно для модульного тестирования, вы можете сделать Ниже только для среды разработки:

"autoload-dev":{ 
    "psr-4" : { 
     "App\\Test\\": "tests/" 
    } 
    } 
+0

Да, но как оно отображает пространство имен в определенный файл? – bruce

+0

@bruce Я просто расширил свой ответ на этом – meda

Смежные вопросы