Skip to content

callbacks, anonymous or lambda functions - the differences

It just took me a while to really understand the differences between this three. But hopefully (never say never ;-), now i got it. A callback simple describes, that a function awaits another function as parameter. This functions can be an existing one or a "on the fly created on" with the power of create_function.

A lambda function is a function without a function name. The reference is stored in a variable. You can use this variable to handle it over to methods like usort. As everybody i will use a sorting lambda function for showing what i mean.

$lengthOfStringTwo) { $sorter = 1; } elseif ($lengthOfStringOne < $lengthOfStringTwo) { $sorter = -1; } return $sorter; }; $names = array( 'Brian W. Kernighan', 'Dennis Ritchie' ); usort($names, $mySorter); echo xdebug_var_dump($names); ?>
It is also possible to define the $mySorter directly in unsort as second parameter like
usort($names, function($stringOne, $stringTwo { ... });
if you like that.

A closure is a function that surrounds (i do not want to use the word enclose ;-)) the lambda function. That has the sideeffect that the closure itself conserves their own context. An easy example is a simple logger.

setMessage($message); $myDatabaseInfoLogTable->setTimestamp(mktime()); $status = $myDatabaseInfoLogTable->save(); break; case 'error': $myFileErrorLog = new ErrorLog(); $myFileErrorLog->addMessage(mktime() . "\t" . $message); $status = $myFileErrorLog->save(); break; } return $status; }; } $infoLogger = myClosureLogger('info'); $errorLogger = myClosureLogger('error'); $infoLogger('This is a info log'); $errorLogger('This is an error log'); ?>
The positiv thing about closures is, that the code footprint can be reduced (you even can use closures inside objects - even as static if you do not need to access on the object itself with $this). The negativ thing is, that you can not use interfaces which implies a lose of security.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Um einen Kommentar hinterlassen zu können, erhalten Sie nach dem Kommentieren eine E-Mail mit Aktivierungslink an ihre angegebene Adresse.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Markdown-Formatierung erlaubt
Formular-Optionen