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! ?>