Как быть со статическими свойствами класса в PHP? Всем привет!
Я немного запутался на счет статических свойств класса.
Реализовываю для Битрикс одну вещь. Так вот. Там при обновлении информационного элемента необходимо изменить значения свойств при его обновлении, что, в свою очередь, ведет к вызову этой же процедуры обновления.
В качестве "предотвратителя" мог бы использоваться какой-то флаг, который бы говорил, что мы вызвали процедуру второй раз, не надо ее выполнять.
Получилось что-то вроде того:class UserHandlers
{
static $disableHandlerForUpdateOther = false;
//UPDATE ACTION
public static function OnAfterIBlockElementUpdateHandler(&$arFields) {
if (!self::$disableHandlerForUpdateOther) {
...
self::$disableHandlerForUpdateOther = true;
...
}
Правильно ли я понимаю, что при одновременном паралелльном обновлении нескольких элементов получится ситуация, что $disableHandlerForUpdateOther будет иметь, возможно, значение true в начале выполнения метода OnAfterIBlockElementUpdateHandler?

21 Авг 2019 в 07:06
183 +1
0
Ответы
1

Да, вы правильно понимаете. Если вы используете статическое свойство класса для хранения флага, который указывает на то, что процедура уже была вызвана, то при параллельном обновлении нескольких элементов может возникнуть проблема.

Поскольку статические свойства класса являются общими для всех экземпляров этого класса, они будут доступны из разных потоков выполнения. Поэтому у вас может возникнуть ситуация, когда один поток уже установил флаг в true, а другой поток пытается обратиться к этому же свойству до его обновления.

Для решения этой проблемы вам следует использовать синхронизацию потоков или другие механизмы, чтобы избежать гонки за данными. Например, вы можете использовать блокировку или мьютекс для синхронизации доступа к этому свойству и обеспечения корректного выполнения вашей логики.

В общем, использование статических свойств для подобных целей не является оптимальным решением, особенно при работе в многопоточной среде. Рассмотрите другие варианты реализации вашей логики без использования общих статических свойств.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир