6 december 2007

Eval waarom?

evalPHP - ook andere scriptingtalen- heben een functie eval. Ik zit me nu al een uurtje af te vragen of ik deze al ooit gebruikt heb. Ik dacht het niet.

Eval() is een functie die de string die je meegeeft als parameter zal uitvoeren als PHP-code. Naast het feit dat eval traag en moeilijk te debuggen is zie ik enkel maar gevaren en geen voordelen.

Ik zie dan ook geen enkel nut van deze functie. Volgens mij kan je er altijd rond schrijven. En op het moment dat je eval wil gaan gebruiken, kan je beter eens nadenken of je wel goed bezig bent. Stel dat je een functie wil aanroepen dan kan je dit met call_user_func().

In javascript gebruiken ze blijkbaar veelvuldig de eval()-functie, ik moet eerlijk toegeven dat ik al redelijk wat JS heb geschreven maar ook daar kan ik me niet voor de geest halen dat ik eval al gebruikt heb. Ofwel heb ik nog nooit echt advanced JS geschreven, of ik programmeer zodanig dat ik eval kan ontwijken. Laten we het maar op het laatste houden. ;)

Kan iemand een degelijk voorbeeld geven om de eval()-functie te gebruiken? Voor gelijk welke taal, scriptingtaal, maakt niet uit, ik wil begrijpen waarom deze functie nodig is.

Dit artikel gaat over: , , , , , . Eval waarom? werd geschreven door Tijs.
Er zijn al 6 reacties.

Reacties

Lode

Lode schreef:
06/12/07

Hier is wel een leuke toepassing:
http://arrix.blogspot.com/2007/02/closure-eval-and-function.html
Maar dat is zoiets dat je eigenlijk nooit echt nodig hebt :)

Erik Bauffman

Erik Bauffman schreef:
06/12/07

Ik blijf eval ietske vies vinden, zeker in php.

Frank

Frank schreef:
06/12/07

Er zijn goede redenen om eval constructies te gebruiken: lambda functies, om zaken te doen die misschien een error geven toch te kunnen proberen (bv een lib import die je misschien niet hebt?) ...

Eval is de max, maar ge moet het gebruiken voor wat het gemaakt is :).

tijs

tijs schreef:
06/12/07

@Frank: je kan met call_user_func toch ook lambda-style functies aanroepen? Of begrijp ik je verkeerd?

Ward

Ward schreef:
06/12/07

eval() in javascript als je gebruik maakt van JSON

zie:
http://en.wikipedia.org/wiki/JSON#Supported_data_types.2C_syntax_and_example

Jan

Jan schreef:
06/12/07

Voor dynamic finders wordt in ActiveRecord (Ruby, Rails) een soort eval gemaakt, in samenwerking met method_missing. Voorbeeld hier:

http://pastie.caboo.se/125376

Dus voor dynamisch functies aan te maken, is eval the way to go.

Reageer velden gemarkeerd met een sterretje zijn verplicht

*