[PHP] parsing probleempje (mbt return/exit)

Pagina: 1
Acties:
  • 188 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 29-01 10:38
ik ben met een website bezig met wat PHP erin, om te beginnen zal ik even wat code plaatsen om mijn probleem te verduidelijken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<HTML>
<HEAD><TITLE>Tietol</TITLE></HEAD>
<BODY>
Welkom op de website!
<?php
  if($bepaalde_waarde){
    doe_iets();
    exit;
  }else{
    doe_iets_anders();
    exit;
  }
  // hier komt wat php dat alleen uitgevoerd mag worden als er nog GEEN exit geweest is
?>
<a href="link.html">hier moet een linkje</a>
</BODY>
</HTML>


Nu wil ik dus, dat er met PHP het een en ander gebeurd, maar als er een exit gegeven wordt de hele PHP-tag "ge-exit" wordt. Dit gebeurd ook wel, maar vervolgens wordt alles NA de "?>"-tag niet meer geparsed. Als er een exit geweest is krijgt de browser van de client dus het volgende door:
HTML:
1
2
3
4
<HTML>
<HEAD><TITLE>Tietol</TITLE></HEAD>
<BODY>
Welkom op de website!


En verder niks, dit is natuurlijk niet de bedoeling want ik wil nog wat opmaak e.d. eronder in de body stoppen. Hoe krijg ik dit voor elkaar? Ook return heb ik geprobeerd, werkt opzich ook, maar ook met hetzelfde probleem.

Rookworst zonder R is ook worst.


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Je moet ook geen exit gebruiken. Ik zou het zo doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<HTML>
<HEAD><TITLE>Tietol</TITLE></HEAD>
<BODY>
Welkom op de website!
<?php
$exit = 0;
  if($bepaalde_waarde){
    doe_iets();
    $exit = 1; // exit = 1 dus alle php hieronder wordt NIET gedaan
  }else{
    doe_iets_anders();
    $exit = 0; // exit = 0, dus php hieronder wordt WEL gedaan
  }
  if ($exit != 1){
// hier komt wat php dat alleen uitgevoerd mag worden als er nog GEEN exit geweest is
}
?>
<a href="link.html">hier moet een linkje</a>
</BODY>
</HTML>


Een exit zorgt er namelijk niet voor dat de PHP stopt, maar dit zorgt ervoor dat de server gewoon helemaal stopt met versturen van data. Hij stopt dus idd echt helemaal.
Je zou het via een functie kunnen doen, en dan "return true", maar zoals ik hierboven beschrijf is denk ik toch wel het makkelijkste en simpelste. :)

__ Edit __

Je zou de $exit natuurlijk in dit geval ook weg kunnen laten en de 2e check ook met $bepaalde_waarde uitvoeren. :)

[ Voor 63% gewijzigd door OkkE op 01-12-2003 16:45 . Reden: ff wat extra uitleg ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 29-01 10:38
OkkE schreef op 01 december 2003 @ 16:39:
Je moet ook geen exit gebruiken. Ik zou het zo doen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<HTML>
<HEAD><TITLE>Tietol</TITLE></HEAD>
<BODY>
Welkom op de website!
<?php
$exit = 0;
  if($bepaalde_waarde){
    doe_iets();
    $exit = 1; // exit = 1 dus alle php hieronder wordt NIET gedaan
  }else{
    doe_iets_anders();
    $exit = 0; // exit = 0, dus php hieronder wordt WEL gedaan
  }
  if ($exit != 1){
// hier komt wat php dat alleen uitgevoerd mag worden als er nog GEEN exit geweest is
}
?>
<a href="link.html">hier moet een linkje</a>
</BODY>
</HTML>


Een exit zorgt er namelijk niet voor dat de PHP stopt, maar dit zorgt ervoor dat de server gewoon helemaal stopt met versturen van data. Hij stopt dus idd echt helemaal.
Je zou het via een functie kunnen doen, en dan "return true", maar zoals ik hierboven beschrijf is denk ik toch wel het makkelijkste en simpelste. :)

__ Edit __

Je zou de $exit natuurlijk in dit geval ook weg kunnen laten en de 2e check ook met $bepaalde_waarde uitvoeren. :)
Opzich zou zo'n contructie kunnen ja, maar de code is veel uitgebreider dan dit voorbeeld, dit heb ik zo maar ff getypt om mijn probleem te illustreren :)
Ik heb bijvoorbeeld tussen die if() en het controleren op de exit-waarde nog veel meer code zitten die niet uitgevoerd mag worden in het geval van een exit (fout dus). En om nou vóór elke mogelijke fout te controleren of er al iets fout gegaan is vind ik nogal omslachtig. Ideaal zou dus zijn als ik na elke fout iets van 'exit' of 'return' zou kunnen geven dat hij dan stopt met het huidige php-blok (dus van <?php tot ?>). Al zou een soort van goto-achtige contructie ook al goed zijn maar deze mogelijkheid is er volgens mij bij PHP niet (opzich verstandig, goto's zorgen toch alleen maar voor verschrikkelijk onoverzichtelijke code).
Mijn vraag is dus: is er niet zoiets beschikbaar voor PHP? Lijkt me toch dat mijn probleem niet zo heel erg uniek is?

Ik bedacht trouwens net tijdens een brainstormpje (;)) dat ik ook ALLE code zou kunnen omvatten in een oneindige for-loop en dan zou kunnen exit'en met een break... nietwaar? (is alleen wederom niet echt netjes) ;)

Rookworst zonder R is ook worst.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je kan ook die code in een functie stoppen en alleen de functie aanroepen indien dat noodzakelijk is...

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Of, indien het ok meer als alleen een if-else gaat, zou je ook eens naar CASE kunnen kijken? Daar zit een BREAK bij; misschien kan je daar wat mee? Evt. in combinatie met de hierboven door mij genoemde optie?

Anders misschien eens iets meer van je code posten, zodat we een beter beeld krijgen can hoe complex de code is.. :?

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 29-01 10:38
ACM schreef op 01 december 2003 @ 19:14:
Je kan ook die code in een functie stoppen en alleen de functie aanroepen indien dat noodzakelijk is...
Dat ik daar niet eerder aan gedacht heb zeg |:(
Ik zou natuurlijk gewoon aan het einde van de hele PHP-code een function kunnen maken (stoppen() ofzo) die leeg is en die gewoon aanroepen als er iets fout gaat. Om die manier stopt wel de executie van de rest van de code maar exit de webserver niet zodat de HTML-opmaak eronder niet verloren gaat... mmm... ik ga het morgen eens proberen, lijkt mij te moeten werken :)
thx voor de tips! :)

Rookworst zonder R is ook worst.


Acties:
  • 0 Henk 'm!

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 29-01 10:38
even voor de volledigheid van het topic:

bovenstaande oplossing werkte uiteraard niet omdat de function returned op de plek waar hij aangeroepen wordt. Ik heb het nu opgelost door de complete code in te sluiten in een while(1)-loopje (infinite dus) en gewoon op de goeie momenten een "break;" te geven :) Werkt prima al moet ik toegeven dat dit niet echt netjes is... ;)

Rookworst zonder R is ook worst.

Pagina: 1