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.