Главная » API Битрикс » COption: GetOptionString и SetOptionString в Битрикс

COption: GetOptionString и SetOptionString в Битрикс

Соответствие методов COption старого ядра и Option из D7 в Битрикс — одно хранилище настроек

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 работают с одним и тем же хранилищем настроек модулей, различаясь только синтаксисом вызова. Смешивать оба класса в одном проекте безопасно — значение всегда остаётся общим независимо от того, каким методом его записали или прочитали.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    База знаний