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?

3
  • read the manual - php.net/manual/en/language.pseudo-types.php .This is the first result for a google search on "php callback function" Commented Oct 25, 2010 at 15:45
  • possible duplicate of How do I implement a callback in PHP? Commented Oct 25, 2010 at 15:52
  • Keep in mind that PHP 5.3 introduced closures, and thus callback usage can be different between pre-5.3 and 5.3+. Commented Oct 25, 2010 at 16:58

3 Answers 3

1

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).

Sign up to request clarification or add additional context in comments.

2 Comments

Might be better to use is_callable() first, to ensure $c is a callable function.
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.
1
function myFunc($param1, $param2, $callback) {
   $data = get_data($param1, $param2)
   $callback($data);
}

Comments

1

You could use type hinting to force someone to use a specific type of variable.

function test(callable $test){
    echo __LINE__.PHP_EOL;
    $test();
    echo __LINE__.PHP_EOL;
}

test(function(){
    echo __LINE__.PHP_EOL;
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.