В ядре D7 для работы с наборами данных (параметрами запроса, опциями, конфигурациями) вместо обычных массивов часто используются объекты-коллекции.
Базовым классом для них является \Bitrix\Main\Type\Dictionary.
Зачем это нужно?
- Удобство доступа: Методы get() и set() вместо квадратных скобок.
- Безопасность: Методы могут содержать логику фильтрации или валидации.
- Гибкость: Объект можно передавать по ссылке, и он реализует интерфейсы ArrayAccess, Iterator, Countable.
1. Bitrix\Main\Type\Dictionary
Это базовая обертка над массивом.
use Bitrix\Main\Type\Dictionary;
$data = [
'name' => 'Ivan',
'age' => 25
];
$dict = new Dictionary($data);
// Доступ как к массиву
echo $dict['name'];
// Доступ через метод (безопасно, если ключа нет)
echo $dict->get('city') ?? 'Unknown';
// Изменение
$dict->set('city', 'Moscow');
// Перебор
foreach ($dict as $key => $value) {
echo "$key: $value<br>";
}2. Bitrix\Main\Type\ParameterDictionary
Этот класс наследуется от Dictionary и используется в объекте Request (для GET, POST параметров). Его особенность — метод getRaw().
use Bitrix\Main\Type\ParameterDictionary;
$params = new ParameterDictionary([
'html' => '<b>Bold</b>'
]);
// Если бы это был Request, метод get() мог бы применить htmlspecialchars
echo $params->get('html');
// Метод getRaw() всегда возвращает исходное "сырое" значение
echo $params->getRaw('html');Где вы это уже видели?
$request = \Bitrix\Main\Context::getCurrent()->getRequest();
// $request->getQueryList() возвращает именно ParameterDictionary
$getParams = $request->getQueryList();
$value = $getParams->get('id');Вывод:
Используйте Dictionary, когда вам нужно передать набор параметров в функцию или класс.
Это делает сигнатуру методов более строгой («Я жду объект Dictionary, а не просто array»), а код — более читаемым и объектно-ориентированным.
Bitrix Dictionary, ParameterDictionary, работа с массивами D7, ArrayAccess, итератор, коллекция параметров, getRaw.