Раздел вопрос-ответ PHP 8.2: Deprecated: Creation of dynamic property Grpc\Call::$channel is deprecated

Deprecated: Creation of dynamic property Grpc\Call::$channel is deprecated

Массово логгируются такие warnings как Grpc\Call::$channel is deprecated.

Проект на PHP 8.2.4.

В зависимостях проекта есть пакет, который зависит от grpc/grpc:

В секции require composer.json:

"grpc/grpc": "^1.34"

Версия ext grpc на сервере:

$ php -i | grep grpc
/etc/php/8.2/cli/conf.d/30-grpc.ini
grpc
grpc support => enabled
grpc module version => 1.49.0

Версия grpc/grpc пакета:

$ composer show grpc/grpc
name     : grpc/grpc
descrip. : gRPC library for PHP
keywords : rpc
versions : * 1.52.0

В коде явных обращений к проперти c именем channel не наблюдается. Ошибка на сервере, локально на той же PHP версии пока не смог воспроизвести.

Так же не могу понять где именно внутри vendor происходит такое обращение к несуществующему проперти.

Прикладываю stack trace из Sentry, где видно что "crashed" внутри vendor grpc/grpc:

Deprecated: Creation of dynamic property Grpc\Call::$channel is deprecated

share

1 ответ

Deprecated: Creation of dynamic property Grpc\Call::$channel is deprecated

Deprecation выстреливает в нативном классе Grpc\Call, который поставляется вместе с grpc ext. То есть проблема не может быть исправлена непосредственно в коде проекта, а требует обновление grpc ext.

Данная проблема (да и не проблема, а просто deprecation, засоряющий логи) воспроизводится только в PHP 8.2+ (что логично, так как с PHP 8.2 dynamic properties deprecated стали) при использовании grpc/grpc и уже исправлена в новых версиях данного grpc ext. 

Могу точно подтвердить, что проблема имеет место в grpc module version => 1.49.0 и точно не воспроизводится, если поставить grpc ext версии 1.53.0:

RUN pecl install grpc-1.53.0 \
    && docker-php-ext-enable grpc

Судя по комментарию автора: https://github.com/grpc/grpc/pull/30997#issuecomment-1478731187, проблема была исправлена в версии grpc/grpc 1.51. Следовательно, использовать нужно версию от 1.51 и более поздние.


Для проверки версии вашего установленного grpc php экстеншена, можно воспользоваться командой php -i как уже было видно в самом вопросе:

# php -i | grep grpc
/usr/local/etc/php/conf.d/docker-php-ext-grpc.ini,
grpc
grpc support => enabled
grpc module version => 1.53.0

В данном выводе видно что версия модуля (ext) 1.53.0. В этом случае deprecation триггерится не будет.

Добавить комментарий
    как минимум 5 символов

    icon Вход в систему

    зарегистрироваться
    НОВЫЕ ПОЛЬЗОВАТЕЛИ