Autor Zpráva
marek187
Profil
Zdravim, chcel by som vediet, ako spravne riesit postupnost pri podmienkach. Ja to mam momentalne riesene napr. takto:

1$ukon1 = ...;
2     if ($ukon1) {
3     $ukon2 = ...;
4          if ($ukon2) {
5          $ukon3 = ...;
6               if ($ukon3) {
7               $ukon4 =...;
8               }                            
9          }
10      }
$ukon1 = ...;
     if ($ukon1) {
     $ukon2 = ...;
          if ($ukon2) {
          $ukon3 = ...;
               if ($ukon3) {
               $ukon4 =...;
               }                            
          }
      }

Funguje to spravne, len ci nieje nato aj lepsi sposob, resp. ci sa to moze tykymto sposobom robit...
mimochodec
Profil
A co takto?

1<?php
2 
3switch ($i) {
4    case 0:
5        echo "i equals 0";
6        $i = 1;
7        break;
8    case 1:
9        echo "i equals 1";
10        $i = 2;
11        break;
12    case 2:
13        echo "i equals 2";
14        $i = 3;
15        break;
16}
17?>
<?php
 
switch ($i) {
    case 0:
        echo "i equals 0";
        $i 1;
        break;
    case 1:
        echo "i equals 1";
        $i 2;
        break;
    case 2:
        echo "i equals 2";
        $i 3;
        break;
}
?>
marek187
Profil
Cize malo by to vyzerat nasledovne?

1switch ($i) {
2    case 0:
3        ukon1;
4        $i = 1;
5        break;
6    case 1:
7        ukon2;
8        $i = 2;
9        break;
10    case 2:
11        ukon3;
12        $i = 3;
13        break;
14    case 3:
15        ukon4;
16        break;
17}
18?>
switch ($i) {
    case 0:
        ukon1;
        $i 1;
        break;
    case 1:
        ukon2;
        $i 2;
        break;
    case 2:
        ukon3;
        $i 3;
        break;
    case 3:
        ukon4;
        break;
}
?>
Alphard
Profil
mimochodec [#2]:
To není ekvivalentní [#1] marek187.

marek187 [#1]:
V principu to je správně, pokud chcete takto do hloubky zanořovat, je to v pořádku. Otázka je, jestli by nebylo lepší rozdělit celý kód do více funkcí. To ale bez kontextu nelze říct.
marek187
Profil
Alphard:
Dam tu napr. takyto priklad:

1    $copy = copy('../../ads/approve/' . $ad->image, '../../ads/' . $ad->image);
2        if ($copy) {
3        $unlink = unlink('../../ads/approve/' . $ad->image);
4        }
5    }
    $copy copy('../../ads/approve/' . $ad->image'../../ads/' . $ad->image);
        if ($copy) {
        $unlink unlink('../../ads/approve/' . $ad->image);
        }
    }
Alphard
Profil
marek187 [#5]:
V tomto kódu se nedostáváte k nějaké 4. úrovni, jak jste původně naznačoval. Kdyby se to táhlo dál např. kontrola provedení unlink apod., může ty podmínky třeba napsat negativně a házet výjimky.
1if (!copy()) {
2  throw new Exception();
3}
4// vše ok, pokračujeme
5if (!unlink()) {
6  throw new Exception();
7}
if (!copy()) {
  throw new Exception();
}
// vše ok, pokračujeme
if (!unlink()) {
  throw new Exception();
}

nebo část zanořené funkčnostni vyčlenit, jak jsem psal výše
if (copy()) {
  clearFile(...); // a další kontroly budou skryté v té funkci
}
if (copy()) {
  clearFile(...); // a další kontroly budou skryté v té funkci
}

Ale uvádím to spíš jako alternativy, kód [#1] může být také dobrá volba. Pokud je zanoření dalších bloků logickým důsledkem předchozího a netrpí tím přehlednost, nevidím v tom problém.
marek187
Profil
Alphard:
Cize takto je to logickejsie?

1copy('../../ads/approve/' . $ad->image, '../../ads/' . $ad->image);
2        if (copy()) {
3        unlink('../../ads/approve/' . $ad->image);
4        }
5}
copy('../../ads/approve/' . $ad->image'../../ads/' . $ad->image);
        if (copy()) {
        unlink('../../ads/approve/' . $ad->image);
        }
}
Jan Tvrdík
Profil
Nevím, jestli je úplně bezpečné na to odkázat, ale risknu to:
Základní kurz XVI. – „Zapovězené“ funkce
petr 6
Profil
[#7]marek187:
Cize takto je to logickejsie?
Takto je to nesmysl.

Takto by to dávalo smysl:
    if (copy('../../ads/approve/' . $ad->image, '../../ads/' . $ad->image)) {
        unlink('../../ads/approve/' . $ad->image);
    }
    if (copy('../../ads/approve/' . $ad->image'../../ads/' . $ad->image)) {
        unlink('../../ads/approve/' . $ad->image);
    }

ale to už by mi přišlo logičtější a především přehlednější to v [#5] (pominu teď to, že ti na konci přebývá pravá složená závorka)
Keeehi
Profil
Ještě je tu jedna možnost
ukon1 && ukon2 && ukon3;
ukon1 && ukon2 && ukon3;

Konkrétně tedy
copy('../../ads/approve/' . $ad->image, '../../ads/' . $ad->image) && unlink('../../ads/approve/' . $ad->image);
copy('../../ads/approve/' . $ad->image'../../ads/' . $ad->image) && unlink('../../ads/approve/' . $ad->image);
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.

Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:


Běda vám, jestli to bude blábol.

0