У меня есть класс PHP с методом, который выводит экземпляр в строку таблицы. Иногда я хочу, чтобы строка была распечатана без имени в начале, иногда я хочу, чтобы все строки были напечатаны и т. Д.Обработка флагов PHP-бит
Я решил использовать бит-флаги, чтобы сделать код более читаемым, но обработка флагов выглядит ужасно. Это мой первый раз с использованием битовых флагов.
Я определил флаги в верхней части класса следующим образом;
define('BAT_TABLE_ROW_PLAYER', 1);
define('BAT_TABLE_ROW_NOPLAYER', 2);
define('BAT_TABLE_ROW_FIELD', 4);
define('BAT_TABLE_ROW_ALL', 7);
Функция, использующая флаги, выглядит следующим образом;
function tableLine($flag=BAT_TABLE_ROW_ALL) {
if(in_array($flag,[1,3,5,7]))
// just return player cell
if(in_array($flag,[2,3,6,7]))
// return all other cells (except fielding)
if(in_array($flag,[4,5,6,7]))
// return fielding cells
return $rtn;
}
Так как вы можете видеть, если BAT_TABLE_ROW_ALL
установлен, все варианты выполнения, как и планировалось.
Проблема заключается в том, что по какой-то причине я должен был добавить еще один флаг (поэтому, чтобы установить значение 8 и ВСЕ на 15, хотя это было бы тривиально, поскольку оно стояло), мне пришлось бы переписать всю функцию. Это неправильно.
Есть ли лучший способ написать вышеприведенную функцию, так что все, что мне нужно сделать, это обновить определения флагов, а затем просто добавить выполнение дополнительного флага в функцию?
я вижу. Поэтому '&' в основном работает как маска данного определения флага над '$ flag'. Удивительно, другие результаты Google, которые вы можете получить, когда узнаете правильный поисковый запрос! – worldofjr