Citat:
Som sagts ovan:
switch tittar på det mellan parenteserna, och i det här fallet så är det isset(). Isset() returnerar en bool, true om variabeln finns, false annars. $_GET['error'] finns i det här fallet, så koden blir
switch gör inte en strikt jämförelse(===) utan (==), så då omvandlar PHP värdena i case-satserna till samma typ som i switch(...). Och nu kan man kanske börja känna vad man får om man omvandlar en sträng(inte den tomma strängen) till en bool? Just det, true.
Så switch-satsen får true att leta efter, av isset(). Och det blir träff direkt, på första "string-caset".
Kod:
"gör en switch" om huruvida variabeln är satt eller inte.
switch(isset(...))
switch tittar på det mellan parenteserna, och i det här fallet så är det isset(). Isset() returnerar en bool, true om variabeln finns, false annars. $_GET['error'] finns i det här fallet, så koden blir
Kod:
. Det är strängar i case-satserna under, så det borde väl aldrig kunna matcha varann, eller hur? Fel. Men det kändes så rätt tidigt, eller hur ..
switch(true) {
switch gör inte en strikt jämförelse(===) utan (==), så då omvandlar PHP värdena i case-satserna till samma typ som i switch(...). Och nu kan man kanske börja känna vad man får om man omvandlar en sträng(inte den tomma strängen) till en bool? Just det, true.
Kod:
(Det blir samma för alla strängar i case-satserna, dvs true.)
php > var_dump((bool) '');
bool(false)
php > var_dump((bool) 'empty_fields');
bool(true)
Så switch-satsen får true att leta efter, av isset(). Och det blir träff direkt, på första "string-caset".
Okej, så min condition bör vara if(isset($_GET[])) och ett case bör vara "error=empty_fields" medan ett annat bör vara "error=username_2_short" exempelvis?
Nu förstår jag i alla fall vad du menar med det du skrev nu plus det du skrivit innan, oavsett vilket fel jag testar för så är $_GET[] = "error" och då kör den bara på mitt första case, jag ska testa detta nu och återkommer om det fungerar!
Tack förresten för att du inkluderade lite exempel på hur man debuggar, var_dump()-funktionen verkar vara synnerligen användbar i sådana slags sammanhang.
EDIT: Okej, så jag förstår verkligen principen av vad du försöker förmedla (tror jag), men jag vet inte riktigt hur jag ska implementera det. Och först och främst vill jag säga att jag har googlat! Jag vet kanske inte exakt vad jag ska googla efter men har letat lite på Stack Overflow och ska fortsätta med det efter att jag skrivit detta inlägg.
Men i alla fall, att bara köra switch(if(isset($_GET[])) utan något värde ger ett felmeddelande, och en tom sträng, alltså switch(if(isset($_GET['']))) triggar tyvärr inga felmeddelanden. Har du något tips på hur jag bör tänka här?
Och ja, jag vet att jag skulle kunna lösa detta problem med en if-sats följt av flertalet else if-satser men anledningen till att jag istället vill använda mig av en switch är för att jag anser att det snyggar till koden och förtydligar allting betydligt bättre än ett if/else if-metoden, så att säga.
__________________
Senast redigerad av Ontogenes 2020-10-19 kl. 20:52.
Senast redigerad av Ontogenes 2020-10-19 kl. 20:52.