грамотная последовательность операторов

Discussion in 'PHP' started by Дикс, 17 Jul 2008.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    имеется такой шаблон, по которому составляется страница:
    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 с парой переменных.

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

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Попробуй вывести в отдельный файл этот вывод, если он повторяется, а потом инклудить в нужных местах. Имхо самый простой способ
    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;    
    }
     
    #2 Chaak, 17 Jul 2008
    Last edited: 17 Jul 2008
  3. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    эмм...ну именно оптимизировать операторы, то попробуй так:
    PHP:
    <?php
    if ($step == 1){

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

    etc Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    113
    Likes Received:
    175
    Reputations:
    1
    Какой изврат. 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;
    }
    ?>
     
  5. -=Static=-

    -=Static=- Banned

    Joined:
    12 Nov 2006
    Messages:
    201
    Likes Received:
    40
    Reputations:
    0
    Может какнить так??
    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;
        }
    }
     
    1 person likes this.
  6. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    ChaaK

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

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

    etc

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

    -=Static=-

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

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

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Code:
    if($step == 1){
    
    } elseif($step == 2 && $bank != 'custom') {
    	if($bank == 1) {
    
    	} elseif($bank == 2) {
    
    	}
    } elseif(($step == 3) || ($step == 2 && $bank == 'custom')) {
    	// ВЫВОД
    }
     
  8. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    да, вот это действительно вменяемое решение.
    тока бля лень мне уже опять на сайт лезть. но всё равно спасибо Номеру, держи репу