Применение флагов
Флагом называют переменную, с двумя состояниями, например true/false или 0/1. Если происходит какое-то событие флаг поднимают или наоборот приспускают - т.е. все как в жизни.
Идея применения флагов подобна идее защитной фольги на тюбике зубной пасты. Если Вы купили зубную пасту и на носике есть защитная фольга - Вы можете быть уверены - Вашей пастой никто не пользовался. Если же фольги нет, уже не так важно сколько раз пользовались Вашей зубной пастой - достаточно факта, что кто-то делал это до Вас.
Так и по флагу можно понять - было ли событие?
Давайте возьмем предыдущий код и заоптимизируем его
if ($a<30) {
if ($a>10) {
$flag =true;
} else {
$flag = false
}
} else {
$flag =false;
}
if ($flag==true) {
echo '10<$a<30';
} else {
echo 'Все плохо';
}
Хм... код стал длиннее. В чем тогда оптимизация!? Даже на этом этапе мы сначала определяем, что произошло, а потом реагируем(выводим на экран). Т.е. наша реакция не дублируется.
Давайте все-таки посмотрим, что можно сделать еще
$flag=false; //будем пессимистами - изначально все плохо
if ($a<30) {
if ($a>10) { //т.е. все плохо, если не случится чудо
$flag =true; //все хорошо - поднимаем флаг
}
}
if ($flag) { // если мы работаем с переменной типа Boolean не имеет смысла еще дополнительно ее сравнивать с true
echo '10<$a<30';
} else {
echo 'Все плохо';
}
Код стал немного короче, НО самое главное - он разделен на две части. Первая - это проверки, вторая реакция. Мы можем менять обе эти части независимо друг от друга. Мы можем поменять реакцию, например записывать результат в базу данных, но нам не нужно будет трогать код проверки. Заказчик может поменять условия, по которым нужно отсеивать $a, но это не как не скажется на коде-реакции.
Т.е. подход с флагами дает гибкость нашему коду - свойству, к которому нам нужно стремиться, потому что оно экономит время, силы, а значит и деньги.