Door
Ozzie PHP
op 30-12-2013 20:48
gewijzigd op 30-12-2013 20:49
1.443 views
Hallo,
Ik vraag me eigenlijk af of je een try/catch blok kunt herhalen als ie in de catch terecht komt. En zo ja hoe?
Stel we hebben zoiets als dit:
<?php
public function foo() {
// code
// ...
try {
$some_integer = rand(1,50);
$this->isLowerThanTen($some_integer); // gooit een exception als het getal groter dan 10 is
} catch (Exception $e) {
// getal is groter dan 10 -> ga weer terug naar het begin van de try
}
// code
// ...
}
Wow, hoe kom jij aan al die kennis Dos? Ik snap je verhaal niet helemaal, maar als ik het goed begrijp stapelt er iets op als je telkens dezelfde functie aanroept, en dat gebeurt niet als je een loop gebruikt? Nou, da's een goede tip om te onthouden! :)
Het geldt niet alleen recursion. Als je naar een ander stukje code (subroutine, function, method, een andere naam voor het zelfde idee) springt moet je ergens een broodkruimel neergooien om te weten hoe je weer thuis komt.
Een stack overflow komt omdat je niet een oneindig grote stack kunt maken omdat er niet genoeg atomen voor zijn =[ Dat betekend dat er een groote voor de stack gekozen moet worden. De groote van de stack bepaald weer hoeveel functies diep kunt gaan.
Als je stack 5 adressen kan bevatten zal het volgende dus al een stackoverflow opleveren.
<?php
function1() {
function2();
}
function2() {
function3();
}
function3() {
function4();
}
function4() {
function5();
}
function5() {
function6();
}
function6() {
function7();
}
function1();
?>
Ik heb op school wat (ben absoluut geen expert) spul geleerd over CPU's :p
Oh, je kan gerust 200 levels diep gaan binnen PHP. En PHP is geschreven in C, dus dat zal nog heel wat meer zijn, hoeveel hangt van het OS, start parameters en mogelijk nog wat dingen af.
Bij simpele (recursieve) code hoef je hier vaak geen rekening mee te houden. Maar als de recursie uit de hand begint te lopen zou je je af moeten gaan vragen of het tijd is om te refacteren.