Вы также можете использовать обратный вызов, который является кортежем массива экземпляра и строкой с именем функции. Если предполагаемый вызов - $ foo-> bar (), то обратный вызов будет:
$callback = array($foo, 'bar');
Обычные функции (не метод) и статические методы хранятся в виде простых строк:
// Function bar
$callback = 'bar';
// Static method 'bar' in class Foo
$callback = 'Foo::bar';
Он вызывается с помощью call_user_func или call_user_func_array, второй параметр, позволяющий передавать функции обратного вызова:
// No parameters
call_user_func($callback);
// Parameters 'baz' and 'bat'
call_user_func_array($callback, array('baz', 'bat');
Может показаться, что это ненужное усложнение, но во многих случаях вам может потребоваться программная сборка вызова функции, или вы можете не знать заранее, сколько параметров вы передадите функции (некоторые функции, такие как array_merge и sprintf, допускают переменное количество параметров).