Как в PHP из массивов сделать объекты с подсказками?

Когда надоело запоминать ключи массивов и хочется пользоваться подсказками любимого редактора кода на помощь приходит PHPDoc и немного смекалки.

Недавно я очень близко познакомился с TypeScript и познал всю прелесть строгой типизации. Как же это приятно, когда редактор кода подсказывает тебе какие поля есть в объекте и что ты с ними можешь сделать!

В чем проблема?

Я работаю с CMS Битрикс (хотел тут поставить точку) и приходится иметь дело с массивами разной формы и содержания, запоминать все ключи или искать их в документации. Это занимает драгоценное время.

Решение:

Первым делом на ум приходит использовать PHPDoc, но тут появляется проблема:


                    Как в PHP из массивов сделать объекты с подсказками?           0

Для PhpStorm есть плагин deep-assoc-completion, он требует описания массива в определённом формате:


                    Как в PHP из массивов сделать объекты с подсказками?           1

Остаётся одна проблема, если мы хотим таких подсказок, нам нужно делать подобное описание в каждом файле, где есть наш массив. Особенно актуально для Битрикса.

Моё решение:

Редактор кода хорошо индексирует объекты, так почему бы нам не привести массив к объекту и описать его?! Но как описать объект без класса, ведь PHPDoc в этом тоже помощник?

Мы можем создать класс, в котором опишем все нужные нам поля. И вот наш редактор уже подсказывает нам.


                    Как в PHP из массивов сделать объекты с подсказками?           2

Хорошо, а дальше? Многомерные массивы мы можем описать так же как описываем интерфейсы в TS. Либо выносим вложенный массив в отдельный класс, либо прописываем в конструкторе текущего класса.


                    Как в PHP из массивов сделать объекты с подсказками?           3

Обратите внимание, конструктор делаем приватным, чтобы нам не мешался, а вложенному полю обязательно создаём описание.

К сожалению PHPStorm не смог понять ни один из вариантов.

Резюме

Вариант конечно запарный, но люди, пишущие на TS и так это уже давно делают. Если есть вариант получше, буду рад рассмотреть.

#bitrix #php #битрикс #typescript #stricttypes #ide #разработка #разработкасайтов #программирование

Источник: портал vc.ru

Добавить комментарий