PHP
#php#php-8-5#bitrix#nodiscard#cache#key#attribute

PHP 8.5: атрибут NoDiscard для ключа кеша (Bitrix)

Функция формирования ключа кеша с #[…oDiscard] (PHP 8.5): предупреждение, если возвращаемое значение не использовано. Приведение (void) для явного игнорирования.

Как использовать

  1. Скопируйте нужный фрагмент кода.
  2. Вставьте в свой проект и при необходимости измените под задачу.
  3. Проверьте зависимости и окружение (версии, переменные).

В PHP 8.5 добавлен атрибут NoDiscard: если возвращаемое значение функции не использовано и не отброшено явно через (void), выдаётся предупреждение. Удобно для функций, которые формируют ключ кеша, ID или URL — забытый результат не теряется «молча». В Bitrix при работе с кешем (теги, ключи по модулю/сущности) это снижает риск ошибок.

<?php

#[\NoDiscard]
function buildCacheKey(string $module, string $entity, string $id): string
{
    return $module . ':' . $entity . ':' . $id;
}

// Предупреждение: return value should be used or (void)
buildCacheKey('sale', 'order', '123');

// Корректно: результат используется
$key = buildCacheKey('sale', 'order', '123');
$cache->get($key);

// Корректно: намеренное игнорирование (например, только сброс по тегу)
(void) buildCacheKey('sale', 'order', '123');

Usage:

use Bitrix\Main\Data\Cache;

$cache = Cache::createInstance();
$key = buildCacheKey('sale', 'order', (string) $orderId);
if ($cache->initCache(3600, $key, '/sale/order/')) {
    $data = $cache->getVars();
} elseif ($cache->startDataCache()) {
    // ...
    $cache->endDataCache($data);
}

Notes:

⚠️ По документации PHP 8.5: атрибут в глобальном пространстве — #[\NoDiscard]. Приведение (void) не влияет на выполнение, но подавляет предупреждение и показывает намерение не использовать значение. Подходит для ключей кеша Bitrix и любых функций, чей результат обязан быть учтён.