Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   грамотная последовательность операторов (https://forum.antichat.xyz/showthread.php?t=77474)

Дикс 17.07.2008 16:18

грамотная последовательность операторов
 
имеется такой шаблон, по которому составляется страница:
PHP код:

if ($step == 1){

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

    }elseif(
$bank == 2){

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


Как несложно заметить - дублируется кусок кода, обозначенный как "ВЫВОД".
Говнокод украинский, это по сути html-страница, в которую вкраплён вот такой скелет из операторов.
Мне нужно удалить дублирование.
Пробовал вот так модифицировать последнее условие:
PHP код:

}elseif(($step == && $bank == 'custom') || ($step == 3)) 

естественно это не работает.

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

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

Chaak 17.07.2008 16:22

Цитата:

Сообщение от Дикс

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

Попробуй вывести в отдельный файл этот вывод, если он повторяется, а потом инклудить в нужных местах. Имхо самый простой способ
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;    



.:EnoT:. 17.07.2008 16:49

эмм...ну именно оптимизировать операторы, то попробуй так:
PHP код:

<?php
if ($step == 1){

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

не тестил, но по идее тоже самое что и твой код, только переделанный...

etc 17.07.2008 16:52

Какой изврат. 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;
}
?>


-=Static=- 17.07.2008 16:56

Может какнить так??
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;
    }



Дикс 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

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


Время: 04:41