201104.15

PHP finally has anonymous functions??

Wow, I can't believe I missed this...nobody seems to be talking about it at all. Ever since PHP 5.3, I can finally do non-generic callbacks.

UPDATE: Check out this description of PHP lambdas (much better than what I've done in the following).

 2 function do_something($value)
 3 {
 4     // used >= 2 times, but only in this function, so no need for a global
 5     $local_function = function($value) { ... };
 6 
 7     // use our wonderful anonymous function
 8     $result = $local_function($value);
 9     ...
10     // and again
11     $result = $local_function($result);
12     return $result;
13 }

There's also some other great stuff you can do:

2 $favorite_songs = array(
3     array('name' => 'hit me baby one more time', 'artist' => 'britney'),
4     array('name' => 'genie in a bottle', 'artist' => 'xtina'),
5     array('name' => 'last resort', 'artist' => 'papa roach')
6 );
7 $song_names = array_map(function($item) { return $item['name']; }, $favorite_songs);

GnArLy bra. If PHP was 20 miles behind Lisp, it just caught up by about 30 feet. This has wonderful implications because there are a lot of functions that take a callback, and the only way to use them was to define a global function and send in an array() callback. Terrible. Inexcusable. Vomit-inducing.

Not only can you now use anonymous functions for things like array_map() and preg_replace_callback(), you can define your own functions that take functions as arguments:

 2 function do_something_binary($fn_success, $fn_failed)
 3 {
 4     $success = ...
 5     if($success)
 6     {
 7         return $fn_success();
 8     }
 9     return $fn_failed();
10 }
11 
12 do_something_binary(
13     function() { echo "I successfully fucked a goat!"; },
14     function() { echo "The goat got away..."; }
15 );

Sure, you could just return $success and call whichever function you need after that, but this is just a simple example. It can be very useful to encapsulate code and send it somewhere, this is just a demonstration of the beautiful new world that just opened for PHP.

So drop your crap shared host (unless it has >= 5.3.0), get a VPS, and start using this wonderful new feature.