Avatar billede mathiash Nybegynder
14. marts 2005 - 15:05 Der er 22 kommentarer og
1 løsning

goto i php

Hej!

Findes der nogen form for goto løkke i php?

//Mathias
Avatar billede madssj Nybegynder
14. marts 2005 - 15:09 #1
Nej.
Avatar billede bromer Nybegynder
14. marts 2005 - 15:09 #2
Nej. Du kan ikke lave label og hoppe til dem via goto.
Avatar billede barklund Nybegynder
14. marts 2005 - 15:10 #3
Jeg vil gerne sige det samme som de to andre - bare med mine egne ord.
Avatar billede mathiash Nybegynder
14. marts 2005 - 15:11 #4
Ok.

Har et script der hiver ud af en database og tjekker om tjek == "1" den SKAL være 1 hvis den ikke er en laver den en sleep(10); så vil jeg have den til at tjekke igen og hvis ikke sleep igen osv indtil den er 0 så kan den gå videre.

Hvordan kan det lade sig gøre? En anden form for løkke?

//Mathiash
Avatar billede madssj Nybegynder
14. marts 2005 - 15:13 #5
Det lyder som om du er ude i en noget skidt løsning, men du kan opnå det samme resultat med f.eks. en while eller for løkke.

while (true) {
    // hent data ud til database til variabel $variabel
    if ($variabel == "0") break;
    sleep 10;
}
Avatar billede jba750 Nybegynder
14. marts 2005 - 15:15 #6
er det ikke bare et eller andet a'la:

while(!check) {
sleep(10)
//query database and set check
}
Avatar billede jba750 Nybegynder
14. marts 2005 - 15:16 #7
...too slow...
Avatar billede elskermad.dk Nybegynder
14. marts 2005 - 16:11 #8
eller via noget funktionsværk lignende madssj og jba750's forslag!
men som madssj skriver lyder det til at være en dårlig løsning du har fundet på?
Avatar billede coderdk Praktikant
14. marts 2005 - 23:43 #9
Du kan f.eks. bruge switch, eller en if-struktur. Goto er ...ikke pænt ;-)

switch ( $variabel )
{
    case "hej":
        echo "Værdien er 'hej'!";
        break;
    case "med":
    case "dig":
        echo "Værdien er 'med' eller 'dig'!";
        break;
    default:
        echo "Ukendt værdi: $variabel";

}
Avatar billede bromer Nybegynder
14. marts 2005 - 23:52 #10
coderdk: Det er vel som man ser på det. Man kan godt lave nydelig kode med goto.
Avatar billede coderdk Praktikant
14. marts 2005 - 23:54 #11
bromer, Så skulle det da være assembler, ellers er der ingen undskyldninger ;)
Avatar billede bromer Nybegynder
14. marts 2005 - 23:56 #12
Det har ikke så meget med undskyldninger af gøre. Hvis man koder pænt og dokumenterer sin kode så er det ikke slemt at bruge goto. Hvis man koder dårligt kan det blive noget makværk. Nu ved jeg godt at folk bliver oplært med at råbe FY når folk nævner goto, men jeg synes virkelig ikke det er begrundet.
Avatar billede barklund Nybegynder
14. marts 2005 - 23:57 #13
Det er da ikke et spørgsmål om undskyldninger - det er vel et spørgsmål om det aktuelle sprog og tilgængelighed.

For eksempel har jeg selv lavet et projekt med en supercompiler over et simpelt imperativt sprog. Det var "de-sugared" om man så må sige, så man brugte goto's (og dermed hale-rekursive kald) frem for løkker - det er lidt nemmere at parse og håndtere nemlig.

Og det var sgu ikke grimt lavet!
Avatar billede coderdk Praktikant
15. marts 2005 - 00:15 #14
bromer, Ja, det er klart. Det er da muligt at skrive flot kode i et grimt sprog ;P

barklund, Jeg forstår ikke lige hvad du mener. Hvordan er en gotostruktur ensbestyndende med tail recursion?

Personligt mener jeg bare at hvis der er alternativer, i.e. hvis det er et proceduralsprog, så bør man undgå goto.
Avatar billede bromer Nybegynder
15. marts 2005 - 00:18 #15
Generelt undgår jeg også at bruge dem, men det er fordi jeg skriver min kode hurtigere sådan. Labels og goto er en meget simpel måde at skrive kode på og simpelt er tit godt :)
Avatar billede barklund Nybegynder
15. marts 2005 - 00:21 #16
Goto svarer da netop til halerekursion - altså hvor man ikke kan modtage eller viderebehandle data efter de rekursive kald - præcis som når man laver goto.

Og der blev valgt et goto-sprog, som ofte anvendes i partiel evaluering af imperative sprog - Flowchart Language.

Jeg siger blot, at "goto" ikke er ensbetydende med et grimt sprog eller dårlig kodeteknik - blot et udtryk for et sprog med meget simple kontrolstrukturer.
Avatar billede coderdk Praktikant
15. marts 2005 - 00:25 #17
barklund, Ja ok, mht. sproget er vi enige ;) Men det lyder som om du definerer tail recursion som et loop ;)
Avatar billede barklund Nybegynder
15. marts 2005 - 00:27 #18
Nø, jeg nævner blot, at i et goto-baseret sprog har man halerekursion og dermed ganske fornuftige kontrolstrukturer til rådighed. :)
Avatar billede coderdk Praktikant
15. marts 2005 - 00:43 #19
Hvorom alting er, bør man kun bruge goto hvis det er den "rigtige" løsning ;-)

Jeg synes dog stadig at det lyder som om du definerer goto som tail recursion... Sproget kræver understøttelse af procedurer og/eller funktioner for at kunne lave rekursion i det hele taget, og det er ikke engang alle af disse der understøtter rekursion :)

Men nu tror jeg vi er kommet lidt off topic ;-D
Avatar billede madssj Nybegynder
15. marts 2005 - 09:23 #20
Jeg kom lige til at kigge lidt i php.internals nyhedsgruppen i går, og der er rent faktisk en der har skrevet et patch[1] der giver php goto's. Dog synes jeg ikke der er brug for det i et sprog der har exceptions, og desuden gerne (lidt) vil være et OO sprog.

[1]: http://news.php.net/php.internals/11599
Avatar billede bromer Nybegynder
15. marts 2005 - 09:30 #21
Selvom det er en smule off topic som coderdk nævnte så synes jeg faktisk det er fint hvis goto-operatoren blev tilføjet permanent til sproget. Det gør det muligt for folk at skrive meget simple (og efter min mening) elegante script, eller de kan forstille at PHP er noget andet end det egentlig er og benytte exceptions og deres fantastiske objektivorienterede model.
Avatar billede mathiash Nybegynder
15. marts 2005 - 15:10 #22
Tak madssj! Læg et svar dit svar virkede perfekt!
Avatar billede madssj Nybegynder
15. marts 2005 - 15:13 #23
Så lidt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester