mixed indica que un parámetro puede aceptar múltiples tipos (pero no necesariamente todos).
gettype(), por ejemplo, puede aceptar todos los tipos PHP, mientras que str_replace() sólo acepta strings y arrays.
Algunas funciones como call_user_func() o usort() pueden aceptar como parámetro funciones de devolución de llamada definidas por el usuario. Las funciones de devolución de llamada no sólo pueden ser funciones simples, sino también pueden ser métodos object, incluyendo métodos de clases estáticas.
Una función de PHP puede ser pasada por su nombre como un string. Cualquier función incorporada o definida por el usuario puede ser usada, excepto los constructores de lenguaje como: array(), echo(), empty(), eval(), exit(), isset(), list(), print() o unset().
Un método de un object instanciado puede ser pasado como un array conteniendo un object en el índice 1 y el nombre del método en el índice 1.
Los métodos de clases estáticas también pueden ser pasdos sin instanciar un object de la clase pasando en el índice 0 el nombre de la clase en lugar del object.
Junto a las típicas funciones definidas por el usuario, tambien se puede usar create_function() para crear una función de devolución de llamada anónima. Desde PHP 5.3.0 también es posible pasar un cierre como un parámetro de devolución.
Example #1 Ejemplos de funciones de devolución de llamada
<?php
// Un ejemplo de función de devolución de llamada
function my_callback_function() {
echo 'hello world!';
}
// Un ejemplo de un método de llamada de retorno
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}
// Type 1: Llamada de retorno simple
call_user_func('my_callback_function');
// Type 2: Llamada de un método de clase estática
call_user_func(array('MyClass', 'myCallbackMethod'));
// Type 3: Llamada del método de un objeto
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Type 4: Llamada de un método de clase estática (a partir de PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');
// Type 5: lamada de un método de clase estática relativa (a partir de PHP 5.2.3)
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
?>
Example #2 Ejemplos de llamadas de retorno usando cierres
<?php
// Un cierre
$double = function($a) {
return $a * 2;
};
// Este es nuestro intervalo de números
$numbers = range(1, 5);
// Use aquí el cierre como una llamada de retorno
// para doblar el tamaño de cada elemento de
// nuestro intervalo
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
El resultado del ejemplo sería:
2 4 6 8 10
Note: En PHP4, era necesario utilizar una referencia para crear una llamada de retorno que apuntase al object actual, y no a una copia del mismo. Para más información consulte Explicando las Referencias.
Note:
Las funciones de retorno de llamada que se registran con funciones como call_user_func() y call_user_func_array() no se llamarán si se produce una excepción en la función de retorno previa.
void como un tipo de variable de retorno significa que el valor de retorno no es útil. void en una lista de parámetros significa que la función no acepta ningún parámetro.
$... en el prototipo de funciones significa and so on. Este nombre de variable se usa cuando una función puede tomar un número infinito de argumentos.