O'Reilly logo

Programming PHP, 3rd Edition by Peter MacIntyre, Kevin Tatroe, Rasmus Lerdorf

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Anonymous Functions

Some PHP functions use a function you provide them with to do part of their work. For example, the usort() function uses a function you create and pass to it as a parameter to determine the sort order of the items in an array.

Although you can define a function for such purposes, as shown previously, these functions tend to be localized and temporary. To reflect the transient nature of the callback, create and use an anonymous function (also known as a closure).

You can create an anonymous function using the normal function definition syntax, but assign it to a variable or pass it directly.

Example 3-6 shows an example using usort().

Example 3-6. Anonymous functions

$array = array("really long string here, boy", "this", "middling length", "larger");

usort($array, function($a, $b) {
  return strlen($a) - strlen($b);
});

print_r($array);

The array is sorted by usort() using the anonymous function, in order of string length.

Anonymous functions can use the variables defined in their enclosing scope using the use syntax. For example:

$array = array("really long string here, boy", "this", "middling length", "larger");
$sortOption = 'random';

usort($array, function($a, $b) use ($sortOption)
{
  if ($sortOption == 'random') {
    // sort randomly by returning (−1, 0, 1) at random
    return rand(0, 2) - 1;
  }
  else {
    return strlen($a) - strlen($b);
  }
});

print_r($array);

Note that incorporating variables from the enclosing scope is not the same as using global variables—global variables are ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required