PDA

Просмотр полной версии : грамотная последовательность операторов


Дикс
17.07.2008, 16:18
имеется такой шаблон, по которому составляется страница:

if ($step == 1){

}elseif($step == 2){
if($bank == 1){

}elseif($bank == 2){

}elseif($bank == 'custom'){
// ВЫВОД
}
}elseif($step == 3){
// ВЫВОД
}


Как несложно заметить - дублируется кусок кода, обозначенный как "ВЫВОД".
Говнокод украинский, это по сути html-страница, в которую вкраплён вот такой скелет из операторов.
Мне нужно удалить дублирование.
Пробовал вот так модифицировать последнее условие:
}elseif(($step == 2 && $bank == 'custom') || ($step == 3))
естественно это не работает.

Можно сделать функцию, которая бы выводила код в двух местах, но мне не хочется лепить сомнительную функцию в чужую, довольно крупную, систему. Которая к тому же, всего лишь выводит html с парой переменных.

У кого есть какие мысли по поводу оптимизации? :)

Chaak
17.07.2008, 16:22
У кого есть какие мысли по поводу оптимизации? :)
Попробуй вывести в отдельный файл этот вывод, если он повторяется, а потом инклудить в нужных местах. Имхо самый простой способ
include("vivod.php");
в vivod.php - повторяющийся код.

или напиши функцию:
function viv(){
//операторы вывода.
}

и куда нужно подставить:
viv();
2-ой способ будет более оптимальный, на мой взгляд.

А с условиями так:
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;
}

.:EnoT:.
17.07.2008, 16:49
эмм...ну именно оптимизировать операторы, то попробуй так:
<?php
if ($step == 1){

}elseif($step == 2 && $bank == 1){

}elseif($step == 2 && $bank == 2){

}elseif($step == 3 || $step == 2 && $bank == 'custom'){
// ВЫВОД
}
?>
не тестил, но по идее тоже самое что и твой код, только переделанный...

etc
17.07.2008, 16:52
Какой изврат. Switch не пробовал юзать?
<?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;
}
?>

-=Static=-
17.07.2008, 16:56
Может какнить так??

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;
}
}

Дикс
18.07.2008, 06:22
ChaaK

новый файл для инклуда пяти строк - нерационально.
про функцию я в своём посте уже написал.
а с условиями - что ты собственно доиблся? дублирование то остаётся.

.:EnoT:.
там дохрена банков. мне кажется код станет совсем нечитабельным, если к каждому условию банка добавлять ещё и условие на step.

etc

вообще, честно говоря не понял, что и зачем ты написал.
про свитч я знаю.

-=Static=-

у тебя проблема вообще на месте осталась. надо же от дублирования ВЫВОД избавится.

Ладно, думаю тема себя исчерпала. Я запостил с мыслью о том, что вероятно имеются простые решения, которые мне неизвестны. Но убеждаюсь что таких решений нет.
Код и так там сложный и запутанный - не буду дальше его усложнять.
Всем спасибо.

NOmeR1
18.07.2008, 08:43
if($step == 1){

} elseif($step == 2 && $bank != 'custom') {
if($bank == 1) {

} elseif($bank == 2) {

}
} elseif(($step == 3) || ($step == 2 && $bank == 'custom')) {
// ВЫВОД
}

Дикс
18.07.2008, 10:04
да, вот это действительно вменяемое решение.
тока бля лень мне уже опять на сайт лезть. но всё равно спасибо Номеру, держи репу