Просмотр полной версии : грамотная последовательность операторов
имеется такой шаблон, по которому составляется страница:
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 с парой переменных.
У кого есть какие мысли по поводу оптимизации? :)
У кого есть какие мысли по поводу оптимизации? :)
Попробуй вывести в отдельный файл этот вывод, если он повторяется, а потом инклудить в нужных местах. Имхо самый простой способ
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'){
// ВЫВОД
}
?>
не тестил, но по идее тоже самое что и твой код, только переделанный...
Какой изврат. 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;
}
}
ChaaK
новый файл для инклуда пяти строк - нерационально.
про функцию я в своём посте уже написал.
а с условиями - что ты собственно доиблся? дублирование то остаётся.
.:EnoT:.
там дохрена банков. мне кажется код станет совсем нечитабельным, если к каждому условию банка добавлять ещё и условие на step.
etc
вообще, честно говоря не понял, что и зачем ты написал.
про свитч я знаю.
-=Static=-
у тебя проблема вообще на месте осталась. надо же от дублирования ВЫВОД избавится.
Ладно, думаю тема себя исчерпала. Я запостил с мыслью о том, что вероятно имеются простые решения, которые мне неизвестны. Но убеждаюсь что таких решений нет.
Код и так там сложный и запутанный - не буду дальше его усложнять.
Всем спасибо.
if($step == 1){
} elseif($step == 2 && $bank != 'custom') {
if($bank == 1) {
} elseif($bank == 2) {
}
} elseif(($step == 3) || ($step == 2 && $bank == 'custom')) {
// ВЫВОД
}
да, вот это действительно вменяемое решение.
тока бля лень мне уже опять на сайт лезть. но всё равно спасибо Номеру, держи репу
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot