Когда вы устали запоминать ключи массива и хотите воспользоваться подсказками любимого редактора кода, на помощь придет PHPDoc и немного изобретательности.
Недавно я хорошо познакомился с TypeScript и осознал красоту строгой типизации.
Как приятно, когда редактор кода сообщает, какие поля есть в объекте и что с ними можно делать!
В чем проблема?
Я работаю с CMS Битрикс и мне приходится иметь дело с массивами разной формы и содержания, запоминать все ключи или искать их в документации.Это отнимает драгоценное время.
Решение: Первое, что приходит на ум — использовать PHPDoc, но тут возникает проблема:
Вы не можете написать многомерный массив так, как предлагает редактор кода./** * int[] * array * array<string> */
Все найденные мной варианты не работают в VSCode и PhpStorm. Погуглив, я нашел вариант, который работал только в VSCode. /**
* @var array $arr $arr
* @var array $arr['fields']
* @var array $arr['fields']['fieldName']
* @var array $arr['fields']['fieldName']['name']
* @var array $arr['fields']['fieldName']['model']
* @var array $arr['fields'][fieldName]['width']
* @var array $arr['fields'][fieldName]['align']
* @var array $arr['fields'][fieldName]['format']
* @var array $arr['fields'][fieldName]['title']
* @var array $arr['fields'][fieldName]['desc']
* @var array $arr['fields'][fieldName]['readonly']
* @var array $arr['fields'][fieldName]['type']
* @var array $arr['fields'][fieldName]['options']
* @var array $arr['fields'][fieldName]['editor']
* @var array $arr['fields'][fieldName]['default']
**/
$arr = [
'fields' => [
'fieldName' => []
]
];
В этом случае среда подскажет вам, какой ключ вы можете выбрать:
Есть плагин для PhpStorm. глубокое-ассоциированное завершение , для него требуется описание массива в определенном формате: /**
* @var array $arr = [
* 'fields' => [ // Defines the feilds to be shown by scaffolding
* $anyKey => [
* 'name' => 'sale', // Overrides the field name (default is the array key)
* 'model' => string, // (optional) Overrides the model if the field is a belongsTo associated value.
* 'width' => '100px', // Defines the width of the field for paginate views. Examples are "100px" or "auto"
* 'align' => 'center', // Alignment types for paginate views (left, right, center)
* 'format' => 'nice', // Formatting options for paginate fields. Options include ('currency','nice','niceShort','timeAgoInWords' or a valid Date() format)
* 'title' => 'Sale', // Changes the field name shown in views.
* 'desc' => 'A deal another person that results in money', // The description shown in edit/create views.
* 'readonly' => false, // True prevents users from changing the value in edit/create forms.
* 'type' => 'password', // Defines the input type used by the Form helper
* 'options' => ['option1', 'option2'], // Defines a list of string options for drop down lists.
* 'editor' => false, // If set to True will show a WYSIWYG editor for this field.
* 'default' => '', // The default value for create forms.
* ],
* ],
* ]
*/
$arr=[
'fields' => [
'0' => [
'model' => 2
]
]
];
В этом случае среда предлагает следующие ключи:
Остается одна проблема, если мы хотим таких подсказок, нам нужно сделать подобное описание в каждом файле, где находится наш массив.
Особенно это актуально для Битрикс.
Мое решение: Редактор кода хорошо индексирует объекты, так почему бы нам не привести массив к объекту и не описать его?! Но как описать объект без класса, ведь в этом тоже помогает PHPDoc? Мы можем создать класс, в котором описываем все нужные нам поля.
И вот теперь нам уже рассказывает наш редактор.
Хорошо, что дальше? Мы можем описывать многомерные массивы так же, как описываем интерфейсы в TS. Либо выносим вложенный массив в отдельный класс:
Или пишем в конструкторе текущего класса:
Обратите внимание, что мы делаем конструктор приватным, чтобы он нам не мешал, и мы должны создать описание для вложенного поля.
Но PHPStorm этого не поймет.
Краткое содержание
Вариант, конечно, парный, но люди, пишущие в ТС, этим уже давно занимаются.Если есть лучший вариант, я буду рад его рассмотреть.
И самое главное, дело не в том, что это нужно делать всегда, а в том, что если нет других вариантов (ограниченных во времени и т. д. и т. п.
), то эту технологию можно использовать.
Теги: #php #bitrix #1С-Битрикс #typescript #bitrix
-
Просто Сделай Это: История Nike
19 Oct, 24 -
Заповеди Молодого Delphi-Разработчика
19 Oct, 24 -
Дятлы
19 Oct, 24 -
Слепой Программист И Кованые Цепи
19 Oct, 24 -
Вопрос Из Itquiz V2.0
19 Oct, 24