Поведение =|

Тема в разделе "PHP", создана пользователем tan_81, 19 апр 2013.

Модераторы: latteo
  1. tan_81

    tan_81 Постоялец

    Регистр.:
    18 окт 2006
    Сообщения:
    128
    Симпатии:
    30
    Никогда не дружил с масками и битовыми сравнениями, поэтому встал в ступор.
    Грубо говоря есть приложения, на которые у пользователя могут буть права на прямую и так же от группы т.е. имеем 2 точки присвоения этих прав с логическим | на сколько я понимаю.
    Сейчас они обе реализованы как $hApplToMask[$uiIdAppl] |= $uiMask (такого сокращения я сколько не искал не нашел, но это работало на 4.2)
    Закономерно PHP ругается на отсутствие некоторых индексов $hApplToMask[$uiIdAppl] т.к. они только формируются.

    Правильно ли я понимаю, что это должно выглядеть с учетом этого логического | так:
    $hApplToMask[$uiIdAppl]=isset($hApplToMask[$uiIdAppl])?$hApplToMask[$uiIdAppl] |= $uiMask:$hApplToMask[$uiIdAppl] = $uiMask

    UPD. Попробовал, понял что быдлокод. Поправил так, но все равно что-то не то получается
    $hApplToMask[$uiIdAppl]=isset($hApplToMask[$uiIdAppl])?$hApplToMask[$uiIdAppl] | $uiMask: $uiMask

    UPD2. Все, заработало, результаты совпали. Правда почему так в итоге не понял. Просто присваивать маску нельзя, только так (0 | $uiMask), иначе при 2 сравнении бурда получается
    $hApplToMask[$uiIdAppl]=isset($hApplToMask[$uiIdAppl])?$hApplToMask[$uiIdAppl] | $uiMask: 0 | $uiMask