Как сделать Update пользователя в обработчике OnAfterUserUpdate без зацикливания.

В обычной ситуации при вызове функции Update класса CUser в обработчике OnAfterUserUpdate приведёт к повторному вызову OnAfterUserUpdate и так по кругу. Таким образом получается замкнутый цикл и скрипт начинает вызывать сам себя бесконечное число раз.

Как же выйти из этой ситуации?

Вариант 1:

А вот как:

В init.php вызываем обработчик:

AddEventHandler("main", "OnAfterUserUpdate", array("CUserHandler", "OnAfterUserUpdateHandler"));

А вот в самом классе CUserHandler делаем такую хитрость:

class CUserHandler
{
	public static $disableHandler = false;
	public static $element_id = '';
	
	function OnAfterUserUpdateHandler(&$arFields){
		if ((self::$disableHandler)&&($arFields['ID']==self::$element_id)){
			return;
		}
		
		self::$disableHandler = true;
		self::$element_id = $arFields['ID'];
		
		//ниже вызываем Update юзера
		//...
	}
}

Смысл в том, что при первом вызове OnAfterUserUpdateHandler всё, что ниже условия проверки значений $disableHandler и $element_id выполняется, а при последующих вызовах — нет.

Вариант 2:

Обновлять св-во по ссылке (т.к. на вход функции подаётся &$arFields )