Как считаете, вот такая конструкция имеет место быть, или это как раз и есть тот самый говнокод? ))
<?php
class test
{
public function doSomethingAwesome($param, callable $callback = NULL)
{
$param += $param;
if($callback !== NULL)
{
$callback($param, $this); //$this or another object.
}
else
{
echo "default behavior"; //Yes, me shouldn't use outputs inside the class. ;)
}
}
public function logger($toDb)
{
/*INSERT INTO .... bla-bla-bla*/
echo $toDb;
}
}
$a = new test();
$a->doSomethingAwesome(10, function($param, $obj){
/*Do something with $param here*/
$obj->logger('The number is ' . $param);
});
$a->doSomethingAwesome(10);
Задача соорудить некий динамический адаптер между методами одного (или даже разных) классов. Цель не загромождать бизнес-логику при стандартном поведении. Которое будет выполняться, конечно же, в большинстве случаев. Замыкание больше как отработка исключительных ситуаций.
Приведенный выше пример не конкретная задача. Просто концепт.