aus if Anweisung in entsprechende else Anweisung springen

BenschM@ster

Mitglied
Servus allerseits,
ist es möglich aus einer if Anweisung in die else Anweisung zu springen, obwohl die if Anweisung wahr ist?

z.B. so:

PHP:
if($x>2) {
if($y>2) {
-->hier in die äußere else Anweisung springen
}
else {
irgendwas
}
}
else {
irgendwas
}
Auf das Problem stoße ich immer wieder. Letztendlich löse ich es indem ich vorher einen Schalter auf 0 setze und diesen dann auf 1 setze wenn ich die entsprechende Anweisung durchführen möchte.
Empfinde ich allerdings als nicht sonderlich sauber, gibt doch bestimmt eine feinere Art.

Liebe Grüße,
Ben
 
Zuletzt bearbeitet:
löse ich es indem ich vorher einen Schalter auf 0 setze und diesen dann auf 1 setze wenn ich die entsprechende Anweisung durchführen möchte

mmmhhhh......
Ich würd sagen das ist im Prinzip voll ok.
Mache ich quasi *situationsabhängig* genauso...

Hierbei geht es darum ein Benutzer Passwort zu ändern.
Möchte der Benuter sein Passwort ändern, muss er auch sein altes angeben um die Änderung quasi zu validieren.
Der Administrator muss zum Ändern eines Benutzer-Passwortes natürlich nicht auch das alte eintippen.

Java:
boolean doChangePassword = true;
        if (p_checkOldPassword)
        {
            String oldPw = createPassword(entity.getUsername(), profile.getUsername(), p_oldPassword);
            if (!(oldPw.equals(entity.getPassword())))
            {
                doChangePassword = false;
                throw new SfxException("OLD PASSWORD IS INCORRECT");
            }
        }

        if (doChangePassword)
        {
            String newPw = createPassword(entity.getUsername(), profile.getUsername(), p_newPassword);
            entity.setPassword(newPw);
        }

EDIT: der *doChangePassword-Part* wäre dann also der ELSE-Zweig
 
Zuletzt bearbeitet:
Wie wär's damit?
PHP:
class ExElse extends Exception
{}

try
{
  if($bConditionAlpha)
  {
    if($bConditionBeta)
    {
      // irgendwas1

      throw new ExElse();
    }
    else
    {
      // irgendwas2
    }
  }
  else
  {
    throw new ExElse();
  } 
}
catch(Exception $oException)
{
  if(get_class($oException) == 'ExElse')
  {
    // irgendwas3 steht jetzt hier, nicht mehr im äusseren else
  }
  else
  {
    // und hier kann man alle anderen exceptions abfangen
  }
}

@edit: jetzt ist es noch sauberer, allerdings ist der aufwand irgendwie übertrieben... lohnt sich eigentlich nur in größeren applikationen, finde ich. wenn überhaupt. eigentlich ist es ziemlich lächerlich... ;-)
 
Zuletzt bearbeitet:
wäre doch eine super Gelegenheit, auch für PHP - oder meinetwegen auch Java - einen Obfuscated Contest zu begründen

neeeeeeee, hau ab!

Obfuscated Contest hab ich genug, wenn ich den Code von meinen Arbeitskollegen sehe:mad:

(auch aber schonmal, *aber ganz ganz selten*, meinen;))
 
Also das Umherspringen gibt es nicht...entweder die Bedingung ist falsch oder wahr :p

Angesichts der Tatsache, dass dein inneres if() keine weitere Funktionalität besitzt, würde da ein simples
Code:
if($x>2 && $y<=2 )
ausreichen.

für mehr könnte switch herhalten:
PHP:
  switch($x>2)
    {
      case true : 
        switch($y>2)
          {
            case true:
              break 1;//inneres switch abbrechen
              
            default: echo 'x ist grösser als 2 aber y nicht';
              break 2;//äusseres switch abbrechen
          }
      default: echo 'Entweder ist x nicht grösser als 2 oder y ist grösser als 2' ;        
    }
 
Zurück