имеется такой шаблон, по которому составляется страница: PHP: if ($step == 1){ }elseif($step == 2){ if($bank == 1){ }elseif($bank == 2){ }elseif($bank == 'custom'){ // ВЫВОД } }elseif($step == 3){ // ВЫВОД } Как несложно заметить - дублируется кусок кода, обозначенный как "ВЫВОД". Говнокод украинский, это по сути html-страница, в которую вкраплён вот такой скелет из операторов. Мне нужно удалить дублирование. Пробовал вот так модифицировать последнее условие: PHP: }elseif(($step == 2 && $bank == 'custom') || ($step == 3)) естественно это не работает. Можно сделать функцию, которая бы выводила код в двух местах, но мне не хочется лепить сомнительную функцию в чужую, довольно крупную, систему. Которая к тому же, всего лишь выводит html с парой переменных. У кого есть какие мысли по поводу оптимизации?
Попробуй вывести в отдельный файл этот вывод, если он повторяется, а потом инклудить в нужных местах. Имхо самый простой способ PHP: include("vivod.php"); в vivod.php - повторяющийся код. или напиши функцию: PHP: function viv(){ //операторы вывода. } и куда нужно подставить: PHP: viv(); 2-ой способ будет более оптимальный, на мой взгляд. А с условиями так: PHP: switch($step){ case 1: //step 1 break; case 2: switch($bank){ case 1: //bank 1 break; case 2: //bank 2 break; case "custom": //вывод; break; } case 3: //вывод break; }
эмм...ну именно оптимизировать операторы, то попробуй так: PHP: <?php if ($step == 1){ }elseif($step == 2 && $bank == 1){ }elseif($step == 2 && $bank == 2){ }elseif($step == 3 || $step == 2 && $bank == 'custom'){ // ВЫВОД } ?> не тестил, но по идее тоже самое что и твой код, только переделанный...
Какой изврат. Switch не пробовал юзать? PHP: <?php if ($i == 0) { echo "i equals 0"; } elseif ($i == 1) { echo "i equals 1"; } elseif ($i == 2) { echo "i equals 2"; } switch ($i) { case 0: echo "i equals 0"; break; case 1: echo "i equals 1"; break; case 2: echo "i equals 2"; break; } ?>
Может какнить так?? PHP: function vivod($step, $bank) { switch($step) { case 1: break; case 2: switch($bank) { case 1: break; case 2: break; case "custom": /*ВЫВОД*/ break; } break; case 3: /*ВЫВОД*/ break; } }
ChaaK новый файл для инклуда пяти строк - нерационально. про функцию я в своём посте уже написал. а с условиями - что ты собственно доиблся? дублирование то остаётся. .:EnoT:. там дохрена банков. мне кажется код станет совсем нечитабельным, если к каждому условию банка добавлять ещё и условие на step. etc вообще, честно говоря не понял, что и зачем ты написал. про свитч я знаю. -=Static=- у тебя проблема вообще на месте осталась. надо же от дублирования ВЫВОД избавится. Ладно, думаю тема себя исчерпала. Я запостил с мыслью о том, что вероятно имеются простые решения, которые мне неизвестны. Но убеждаюсь что таких решений нет. Код и так там сложный и запутанный - не буду дальше его усложнять. Всем спасибо.
Code: if($step == 1){ } elseif($step == 2 && $bank != 'custom') { if($bank == 1) { } elseif($bank == 2) { } } elseif(($step == 3) || ($step == 2 && $bank == 'custom')) { // ВЫВОД }
да, вот это действительно вменяемое решение. тока бля лень мне уже опять на сайт лезть. но всё равно спасибо Номеру, держи репу