mixed говорит о том, что параметр может принимать много (но необязательно все) типов.
gettype() например, принимает все типы PHP, тогда как str_replace() принимает только string и array.
Некоторые функции, такие как call_user_func() или usort() принимают в качестве параметра определенные пользователем callback-функции. Callback-функции могут быть не только простыми функциями, но также и методами объектов, включая статические методы классов.
PHP-функция передается просто как строка ее имени. Можно использовать любую встроенную или пользовательскую функцию, кроме языковых конструкций, таких как: array(), echo(), empty(), eval(), exit(), isset(), list(), print() и unset().
Метод созданного объекта передается как массив, содержащий сам объект в элементе с индексом 0 и имя метода в элементе с индексом 1.
Статические методы классов также могут быть переданы без создания экземпляра объекта данного класса путем передачи имени класса вместо имени объекта в элементе с индексом 0.
Кроме общих пользовательских функций, create_function() также может быть использована для создания анонимной callback-функции. Начиная с версии PHP 5.3.0 стала возможным также передача замыканий в callback-параметр.
Пример #1 Примеры callback-функций
<?php
// пример callback-функции
function my_callback_function() {
echo 'hello world!';
}
// пример callback-метода
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}
// Вариант 1: простой вызов callback
call_user_func('my_callback_function');
// Вариант 2: вызов статического метода класса
call_user_func(array('MyClass', 'myCallbackMethod'));
// Вариант 3: вызов метода объекта
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Вариант 4: вызов статического метода класса (с версии PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');
// Вариант 5: вызов относительного статического метода класса (с версии PHP 5.3.0)
class A {
public static function who() {
echo "A\n";
}
}
class B extends A {
public static function who() {
echo "B\n";
}
}
call_user_func(array('B', 'parent::who')); // A
?>
Пример #2 Пример callback-вызова с использованием замыканий
<?php
// наше замыкание
$double = function($a) {
return $a * 2;
};
// это наш диапазон чисел
$numbers = range(1, 5);
// Используем здесь замыкание в качестве callback-функции
// для удвоения размера каждого элемента в диапазоне
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
Результат выполнения данного примера:
2 4 6 8 10
Замечание: В PHP4 было необходимо использовать ссылку при создании callback-функции для того, чтобы она указывала на реальный объект, а не на его копию. За подробностями обращайтесь к разделу Объяснение ссылок.
Замечание:
Callback-функции, зарегистрированные такими функциями как call_user_func() и call_user_func_array(), не будут вызваны при наличии непойманного исключения, брошенного в предыдущей callback-функции.
void в качестве типа результата означает, что возвращенное значение бесполезно. void в списке параметров означает, что функция не принимает параметров.
$... в прототипах функции означает and so on (и так далее). Это имя переменной используется когда функция может принимать бесконечное количество параметров.