В этой статье я опишу два способа указать неймспейсы в вашем проекте на PHP, чтобы PhpStorm их “увидел”.

Если вы уже знаете что такое неймспейс и автолоадер, пропустите начало и пролистайте вниз, к способам.

Что такое неймспейс

Неймспейс — это группировка классов объединённых общим назначением.

“Namespace” переводится как “пространство имён”, но этот термин не прижился, поэтому далее пишу “неймспейс”.

По соглашениям принятым в PHP, неймспейсы соответствуют структуре папок в проекте: PSR-4.

Пример неймспейса

В классе PHP неймспейс будет выглядеть так:

<?php

namespace App\Money\Models;

class MoneyTransfer { ... }

При этом сам файл MoneyTransfer.php будет находиться в папке /src/Money/Models.

Все папки начиная от /src будут транслированы в неймспейс, потому что таков стандарт. Если мы видим в неймспейсе Money то это означает папку Money. И далее все папки по вложенности. Очень удобно.

Неймспейсы сообщают автолоадеру, в каких папках искать файлы классов.

Автолоадер

Автолоадер — это служебный код, с помощью которого интерпретатор в момент выполнения кода вашего приложения находит в файловой системе все классы которые упоминаются в выполняемом коде.

Автолоадеру известен неймспейс и имя класса, он ищет файл на диске чтобы загрузить этот класс.

В интерпретаторе PHP есть встроенный автолоадер, он не очень полезен, так как алгоритм поиска туповат. Но встроенный автолоадер можно переопределить, поэтому раньше фреймворки так и делали, в фреймворки встраивались свои автолоадеры.

Стоило создать приложение на фреймворке, и ваши классы моделей начинали подгружаться из папки /models, контроллеры из /controllers и так далее.

В современных фреймворках уже отошли от этого и используют встроенный в Composer автолоадер. Он использует стандарт PSR-4 и поэтому его легко освоить.

Корневой неймспейс

Но как автолоадер, который ищет классы по неймспейсам, узнает что папка src это корневой неймспейс App?

Ведь имя корневого неймспейса и папки различаются и вообще могут быть произвольными, например папка classes и неймспейс CoolLibrary. Тут не угадаешь.

Информация о том к какой папке привязан корневой неймспейс нужна не только автолоадеру в момент выполнения кода, но и нашему IDE, в частности PhpStorm.

Рассмотрим два способа добавить эту информацию о корневом неймспейсе.

Способ 1. Неймспейс в composer.json

Указываем, что папка src это корневой неймспейс App.

В файл composer.json добавляем следующие строки:

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

Как результат, этот неймспейс должен подхватиться и стандартным композеровским автолоадером, и PhpStorm.

Способ 2. Неймспейс в настройках PhpStorm

Шаг 1. Помечаем папку src как папку с исходным кодом

Правой кнопкой мыши нажимаем на папку src, в меню выбираем “Mark Directory as” -> “Sources Root”.

Помечаем папку как папку с исходным кодом в PhpStorm

Шаг 2. Привязываем неймспейс в настройках

Редактируем неймспейс для папки в настройках PhpStorm

Теперь PhpStorm будет знать, какой неймспейс привязан к папке.

Этот способ особенно полезен для проектов созданных на старых версиях фреймворков.

Результат

Мы можем проверить, что неймспейс привязан правильно.

Создадим новую папку, /src/ElonMusk.

Теперь создадим класс Tesla:

Создаём класс в PhpStorm

Мы видим, что PhpStorm указал для создаваемого класса правильный неймспейс App\ElonMusk.

<?php

namespace App\ElonMusk;

class Tesla
{

}

Всё работает 🎉