Recursie (php3/4/5.0)

Carl on mrt 2nd 2011 07:27 am | Tags: ,

Recursie zou in de huidge versies van php goed moeten werken. Echter, als dat niet het geval is, lees het onderstaande en probeer het alternatief.

PHP is soms niet gemakkelijk te doorgronden. Een van de problemen die je als programmeur geheid tegen zal komen is dat je een functie recursief wilt aanroepen. Als je dan je code zover hebt om te testen, kom je er achter dat de waarde van je initïele variabele ineens niet meer hetzelfde is. Je array of hash bevat niet meer dezelfde waarde(n) maar alleen de eerste …

In PHP kan je een methode recursief aanroepen, niet een functie. Verwarrend? Ja, nogal, want dit wil zeggen dat je alleen in een class/object recursief kan werken. Ondanks dat het lijkt dat je functies schrijft in een class – doordat je ‘function’ gebruikt – zijn het methoden.

Het recursief aanroepen van de methode kan je niet op de gebruikelijke manier: ‘$this->methodname ([all your paramaters]);’. Recursie krijg je alleen voorelkaar met ‘classname::methodname([all your params);’. Indien je het met ‘$this->..’ probeert, zal je merken dat je array|hash wederom is teruggebracht naar één waarde. Dat komt omdat je data zich nog in dezelfde instantie/namespace (of hoe je het ook noemen wilt) bevindt. Daardoor wordt je variabele overschreven. Indien je gebruik maakt van ‘class::method ..’, maak je gebruik van een nieuwe instantie van je class, waar die variabele nog niet in voorkomt.

P.s. Let op met static methods.

Filed in PHP

Comments are closed.