COption — хранилище настроек старого ядра 1С-Битрикс, работающее
с теми же данными, что и современный Bitrix\Main\Config\Option
из D7. Значение, записанное одним классом, читается другим без каких-либо
преобразований — это одна и та же таблица в базе.
Основные методы
<?php
// запись строки
COption::SetOptionString('myproject', 'api_key', 'abc123');
// чтение строки со значением по умолчанию
$key = COption::GetOptionString('myproject', 'api_key', 'default');
// запись и чтение числа
COption::SetOptionInt('myproject', 'items_limit', 20);
$limit = COption::GetOptionInt('myproject', 'items_limit', 20);
// удаление
COption::RemoveOption('myproject', 'api_key');
В отличие от универсального Option::get() из D7, у старого
класса методы разделены по типу: строка читается одним вызовом, число —
другим. Технически оба метода возвращают строку из базы, но
GetOptionInt сразу приводит её к числовому типу, избавляя
от ручного приведения.
Соответствие методов
| COption (старое ядро) | Option (D7) |
|---|---|
GetOptionString($module, $name, $default) | Option::get($module, $name, $default) |
SetOptionString($module, $name, $value) | Option::set($module, $name, $value) |
GetOptionInt(...) | (int)Option::get(...) |
RemoveOption(...) | Option::delete(...) |
Взаимозаменяемость методов — практичное свойство при поддержке смешанного
проекта: старый код продолжает читать значение через COption,
новый код пишет его через Option::set(), и оба работают
с одной и той же настройкой без конфликтов.
Нужна помощь с Битрикс?
Настройки для конкретного сайта
<?php
COption::SetOptionString('myproject', 'phone', '+7 (495) 000-00-00', 's1');
$phone = COption::GetOptionString('myproject', 'phone', '', 's1');
Пятый параметр (в примере — четвёртый позиционный аргумент) задаёт сайт на многосайтовой конфигурации. Если значение для конкретного сайта не задано, возвращается общее — тот же принцип, что и в D7-варианте.
Хранение массивов и сложных структур
Хранилище — текстовое, поэтому массив напрямую не сохранится. Практика та же, что и в D7-варианте: сериализация в JSON перед записью и разбор при чтении.
<?php
$settings = ['timeout' => 10, 'retries' => 3];
COption::SetOptionString('myproject', 'http_settings', json_encode($settings));
$raw = COption::GetOptionString('myproject', 'http_settings', '[]');
$parsed = json_decode($raw, true);
JSON предпочтительнее устаревшей функции serialize():
значение остаётся читаемым, если понадобится посмотреть его напрямую
в базе данных, а не только через код.
Практические рекомендации
-
Для нового кода используйте
Optionиз D7. Синтаксис компактнее, а поведение полностью совпадает. -
Значения всегда строки в базе. Логические флаги удобнее
хранить как
'Y'/'N', а не булевым типом — строгое сравнение сtrueникогда не сработает. - Указывайте значение по умолчанию при чтении. На чистой установке настройка ещё не задана, и без умолчания вернётся пустая строка.
Итог
COption и его современный аналог из D7 работают с одним
и тем же хранилищем настроек модулей, различаясь только синтаксисом
вызова. Смешивать оба класса в одном проекте безопасно — значение
всегда остаётся общим независимо от того, каким методом его записали
или прочитали.
