views:

42

answers:

3

Some functions in PHP require a callback function. How can I do this in a function myself? First of all, how do I define a function that require a callback function?

And secondly, how do I provide a custom function as the callback function? How do I provide a regular function, an instance function and a static function?

A: 

This should help:

http://php.net/manual/en/language.pseudo-types.php

Evan Mulawski
A: 
function myFunc($param1, $param2, $callback) {
   $data = get_data($param1, $param2)
   $callback($data);
}
infinity
A: 

Use the built in call_user_func(). It may be necessary to use call_user_func_array()

function work($a, $c) {
  $a = filter($a)
  if(!is_callable($c) || !call_user_func($c, $a)) {
    return 0; // throw error
  } else {
    return 1; // return success
  }
}

This is safer than just doing $c($a) a.k.a passed_callback(passed_argument) because checking to see if the function actually exists is done for you, though some have commented on performance degradation over $c($a).

Andrew Sledge
Might be better to use is_callable() first, to ensure $c is a callable function.
mellowsoon
@mellowsoon: Good point. Answer updated.
Andrew Sledge
I'd probably use something similar to your code just to be complete, but I'm not sure it makes a difference. Passing a non-callable function is going to cause one of two things: Your code is going to throw an error because you used is_callable, or PHP is going to throw an error because $c() isn't a valid callback. The end result is the same, but the latter is faster because it avoids calling is_callable and call_user_func.
mellowsoon