PHP IF Anweisung - Break in den Else?

... komplette Frage anzeigen

6 Antworten

Normalerweise benutzt man dafür saubere Funktionen:

function foo($x) {
switch ($x) {
case 12345:
echo 'Yippiiieee!!!';
break;
default:
echo 'OMG, WTF!?!?';
}
}

function bar($x) {

switch ($x){ case 111: echo 'Hallo Welt!';
break;
case 222:
echo 'Hello World!';
break;
default: foo($x); }
}

// bisheriger modifizierter Code:
if($a == 'test'){
bar($b);
} else {
foo($c);
}

Disclaimer: Ich weiß, dass obiger Code einige Macken im Bezug auf den Stil hat, aber ich will hier niemanden überfordern! :)

Ich würde das gesamte Design nochmal überdenken. Wenn eine Funktion länger als 10 Zeilen ist, oder eine tiefere Verschachtelung als eine einzige Ebene enthält, schreit das normalerweise nach einem Refactoring!

Naja, viel Erfolg noch! ;)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Plueschtier94
23.08.2016, 23:30

Danke für die Antwort, war zu dem Zeitpunkt schon genauso abgeändert.

1

Spontan fällt mir dazu nur ein, den else-Block in eine Funktion auszulagern und diese sowohl im else als auch im default aufzurufen. 

Ich überlege aber nochmal...

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Suboptimierer
23.08.2016, 10:02
$bSonst = false;
if($test == 'test')
{
switch($test111) {
case: 111
echo 'Hallo Welt';
default:
$bSonst = true;
}
} else $bSonst = true; if($bSonst) { // switch mit anderen Überprüfungen }



0

Zu diesem Zeitpunkt ist das nicht mehr möglich. Dann solltest du den Code aus dem Else-Zweig in eine extra Methode packen, und diese sowol aus dem Else-Zweig als auch aus dem default-Zweig ausrufen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Plueschtier94
23.08.2016, 09:54

Davon bin ich auch schon ausgegangen. 
Danke für die Antwort. 

0
Kommentar von CounterMonkey
23.08.2016, 10:02

Wenns unbedingt so sein soll könnte man von hinten durch die Brust ins Auge ein Flag setzen und das ganze nochmal überprüfen, ist aaber mehr als unschön ^^

$flag = false;
if($test == 'test' && $flag == false){
switch($test111){
case: 111
echo 'Hallo Welt';
default:
$flag = true;
}
}
if($test == 'test' && $flag == true){
switch mit anderen Überprüfungen
}
0

Du kannst prüfen ob der erste switch block den default wert zurückgegeben hat und wenn ja dann den nächsten durchlaufen lassen

Antwort bewerten Vielen Dank für Deine Bewertung

Du bist nicht gezwungen ein default zu machen. Lösche den default dadurch mpsste er alle case durchchecken. trifft nichts zu geht er automatisch ins else.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Cr33p
23.08.2016, 10:52

Er geht nicht ins else. Die Bedingung $test == 'test' bleibt doch bestehen und solange geht er nicht ins else

0

Wieso so kompliziert?

if($test == 'test' && $test111 == 111 ){
echo 'Hallo Welt';
}else {
// switch mit anderen Überprüfungen
}

Nimm die zweite Überprüfung mit in die If-Abfrage. Der Rest kommt in den else-teil.

Da brauchst du keine Flags und keine zusätzlichen Methoden.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Plueschtier94
23.08.2016, 11:08

Danke, aber das war nur eine Kurzform der Switch und deswegen ist das unpassend hier.

Mache knapp 30 Überprüfungen und weise immer verschiedene Variablen zu.

Danke dennoch. 

0

Was möchtest Du wissen?