Подскажите что за запись в кавычках {}. Непонятно почему переменная равна себе и зачем | Код (PHP): class Disp { LOGOUT_TRUE = 15; NEW_TRUE = 30; function doit { $chance = 0; if ((isset($_GET['login_out']))&&($_GET['login_out']=='yes')) { $chance = $chance | Disp::=LOGOUT_TRUE; } if ((isset($_GET['blabla']))=='yes')) { $chance = $chance | Disp::=NEW_TRUE; } return $chance; }
1. { } это не кавычки а фигурные скобки. в школе объяснить должны были что как называется 2. переменная не равна сама себе. там идет присвоение с бинарным "или" к своему же значению. это алгебра логики. 3. насколько я понимаю там не должно быть двух равно в обрамлении "двойного двоеточия" (да, эта херня так и называется, двойное двоеточие, Paamayim Nekudotayim по-еврейски)
а нельзя вместо $chance = $chance | Disp=::=LOGOUT_TRUE; написать Disp=::=LOGOUT_TRUE; ? Добавлено спустя 2 минуты: Вот более полный код
может быть и можно. но если автор кода работает с битмапом то нельзя. у тебя единственный выход пойти и выучить матчасть. как и еще одному особо отличившемуся. подскажу о чем речь. если ты пихаешь $var = CONST то ты присваиваешь значение. в твоем случае единицу. а запись с бинарным или меняет только часть битов. это алгебра логики. например 4 | 1 = 5 а 5 | 5 = 5 потому что 100 | 001 = 101 и 101 | 101 = 101. я надеюсь ты про двоичную систему слышал и мне не придется объяснять тебе почему "сто один плюс сто один равно сто один"? Добавлено спустя 3 минуты 7 секунд: если выражаться научным языком - не черта а ПАЙП. да, это Логическое ИЛИ. оно же Дизъюнкция.
Чуть исказил исходник- там константы вначале указываются следующим образом-наверное это важно Код (PHP): class Disp { LOGOUT_TRUE =1 ; NEW_TRUE2 = 2; EW_TRUE3 = 4; EW_TRUE4 = 8; EW_TRUE5 = 16; function doit { $chance = 0; if ((isset($_GET['login_out']))&&($_GET['login_out']=='yes')) { $chance = $chance | Disp::=LOGOUT_TRUE; } if ((isset($_GET['blabla']))=='yes')) { $chance = $chance | Disp::=NEW_TRUE; } ....... ....... return $chance; }
вот видишь. это реально важно оказалось. мне только не понятно зачем там равно в районе дд. или это ты так кривишь исходник?
Да опечатка. Далее код используется так Код (PHP): if ($chance & Disp::=NEW_TRUE) { do......... } Так все-таки зачем все это так делать
мдя... с каким поколением программистов приходится работать. рассказываю для ленивых и как я люблю выражаться - аутистов. у тебя есть некоторый набор флагов. каждый флаг это тупо да-нет. нахер плодить булен-переменных если это логика битов и можно упаковать несколько флагов в один байт? рисуем константы IS_USER = 1, IS_ACTIVE = 2, IS_ADMIN = 4 - утрированный список из трех флагов. к сожалению у многих современных программистов почему-то проблемы с английским поэтому переведу. это у нас признаки "пользователь", "активен", "является админом". в контексте первого флага наверное отрицание будет давать бота к примеру. не суть важно. итак у нас есть 3 константы флагов и три странных числа. а числа не просто так подобраны. это степени двойки. хотя многим современным программистам это ни о чем не говорит к сожалению. так вот в битах этих чисел записано (последний квартет) 0001, 0010 и 0100 соответственно. лепим теперь из флагов битмап. пользователь активный - IS_USER | IS_ACTIVE: 1 | 2 = 3 или 0001 | 0010 = 0011 отключенный админ - IS_USER | IS_ADMIN: 1 | 4 = 5, 0001 | 0100 = 0101 это композ битмапа. теперь проверка. является ли зашедший к нам Пользователем? $bitmap & IS_USER тут у нас не Логическое ИЛИ которое мы в композе использовали а Логическое И. оно вернет включенные биты только на тех позициях где они включены в нашем случае 0011 и 0101 накладываются на 0001 и это в обоих случаях дает 0001 то есть да у нас из_юзер теперь проверим кто у нас активен $bitmap & IS_ACTIVE 0011 & 0010 = 0010 (2) 0101 & 0010 = 0000 (0) в первом случае числовая двойка это логическая истина. я надеюсь не надо объяснять принцип каста логической истинности? проверим кто у нас админ $bitmap & IS_ADMIN 0011 & 0100 = 0000 (0) 0101 & 0100 = 0100 (4) а админ у нас только во втором случае усложняем. кто у нас активный админ? ищем $bitmap & (IS_ACTIVE | IS_ADMIN) = $bitmap & (0010|0100) = $bitmap & (0110) но с проверкой результата наложения (IS_ACTIVE | IS_ADMIN)==($bitmap & (IS_ACTIVE | IS_ADMIN)) 0011 & 0110 = 0010 и это не равно 0110 - не является активным админом 0101 & 0110 = 0100 и это тоже не равно 0110 - не является активным админом блин хреново без админа мне. надо включить второго юзера (напомню там 5 или 0101) $bitmap |= IS_ACTIVE (эквив записи $bitmap = $bitmap | IS_ACTIVE) 0101 | 0010 = 0111 (7) теперь проверим его опять на админство 0111 & 0110 = 0110 и это (ябать!) равно ноль-один-один-ноль - это наш активный админ, ура. как же без такой смешной штуки как ревок флага? для этого нам нужно наложить отрицание флага. допустим админ перестал должным образом выполнять свои обязанности. ходит всех аутистами называет. флаг у нас IS_ADMIN это 0100. его отрицание будет 1011. сложение с отрицанием будет: 0111 & 1011 = 0011 - всё, он теперь просто пользователь (0001) и активен (0010) пхп кодом это будет: $bitmap &= ~ IS_ADMIN (по традиции для аутистов $bitmap = $bitmap & ~ IS_ADMIN) ну поскольку я не жадный то поделюсь двумя соображениями из своего многолетнего опыта работы с битмапами. 1. очевидный плюс - можно описать любое кол-во флагов. допустим тип int это 4 байта (у некоторых аж 8) а это 32 бита или целых 32 флага. 8 байт это 64 бита. если мало целочисленных - пакуйте в строки. ведь строки это те же байты набранные теми же битами. какое у нас там ограничение бывает? ну допустим поле TEXT в мускуле это 16Мб без одного байта (не буду лезть в реф уточнять да простите уж мою ленивую жопу. на себя поглядите - вы почему-то ленитесь узнавать. а я поленюсь уточнить. вот). 16мб это (16*1024*1024)-1 = 16777216 - 1 = 16777215 байт или 134 217 720 бит. не знаю кому понадобится сто тридцать два миллиона флагов в описании одного объекта но им явно заинтересуются санитары, хотя как мы видим этих самых флагов можно очень и очень и очень много использовать. и это будет компактно по сравнению со ста тридцатью двумя миллионами отдельными полями в массиве или отдельными переменными или отдельными полями в таблице. 2. очевидный минус - не поддается индексации. то есть мускулу придется перебрать все строки при поиске по биту в битмапе. спасибо за внимание. с рождеством всех верующих!
php_user, нет такой операции ::=, это твой косяк. Перестань уже повторять это гуано! В оригинале видимо было Класс::КОНСТАНТА