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

$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?

<?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?

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:

    $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.
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
}

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?

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

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;

Konkrétně tedy
copy('../../ads/approve/' . $ad->image, '../../ads/' . $ad->image) && unlink('../../ads/approve/' . $ad->image);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: