Con PHP 5 è stato introdotto il type hinting, cioè una funzionalità che permette di forzare i parametri ad essere un qualcosa come… un array, un oggetto o un’interfaccia.
Da PHP 5.4 è stato aggiunto un nuovo type hinting, il callable cioè un qualunque callback valido (funzione, closure, oggetto invocabile etc..).
Un esempio come al solito ci schiarisce le idee:
<?php
class MyClass
{
//Il primo parametro deve essere un callable
function test_callable(callable $callback, $data) {
call_user_func($callback, $data);
}
}
function callback($data) {
echo $data;
}
$o = new MyClass();
$o->test_callable('callback', 'foo'); //foo
?>
Molto semplice, il primo parametro del metodo test_callable deve essere un callback valido. Se, per esempio, tentassimo di passare una stringa, riceveremo un messaggio simile a questo:
Usando un oggetto come funzione
Possiamo anche passare un oggetto come callable, infatti dichiarando nella classe il metodo magico __invoke forziamo una sua istanza a comportarsi come una funzione:
<?php
function myFun(callable $func) {
$func();
return " world!";
}
class CallableClass
{
public function __invoke()
{
echo 'Hello,';
}
}
$o = new CallableClass();
echo myFun($o); //Hello, world!
?>