В обычной ситуации при вызове функции 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 )