foo::registerFilter('baz', 'PARAMS', function($params) { $params['data'][] = 'FILTER DATA #1'; return $params; }); foo::registerFilter('baz', 'RETURN', function($result) { $result[] = 'FILTER RESULT #1'; return $result; }); foo::registerMethod('baz', function($data) { $data = 'called baz('.$data.')'; $data = (array) $data; return static::aspectable('baz', get_defined_vars(), function($data, $bla = NULL) { $data[] = __METHOD__; return $data; }); }); var_dump(foo::baz('hello')); /* array(4) { [0]=> string(17) "called baz(hello)" [1]=> string(14) "FILTER DATA #1" [2]=> string(14) "root\{closure}" [3]=> string(16) "FILTER RESULT #1" } */ foo::registerMethodProto('baz', function($data, $bla = NULL) { $data[] = 'new proto: '.__METHOD__; return $data; }); var_dump(foo::baz('hello')); /* array(4) { [0]=> string(17) "called baz(hello)" [1]=> string(14) "FILTER DATA #1" [2]=> string(25) "new proto: root\{closure}" [3]=> string(16) "FILTER RESULT #1" } */