protected static function aspectable($__function, array $__parameters = [], $__prototype = NULL) { $__class = get_called_class(); if(isset($__parameters['this'])) unset($__parameters['this']); if(TRUE === static::Core_StaticObject_tAdapter_exists($__function)) return static::Core_StaticObject_tAdapter_emit($__function, $__parameters); $__parameters = static::Core_StaticObject_tFilter_emit($__function, 'PARAMS', $__parameters, ['return' => $__parameters]); static::Core_StaticObject_tSignal_emit($__function, 'PRE_EVENT', [$__parameters], ['return' => $__parameters]); $__result = static::Core_StaticObject_tMethodFacade_emit($__function, $__parameters, function(array $__params) use ($__class, $__function, $__prototype) { $result = NULL; if(TRUE === static::Core_StaticObject_tMethodProto_exists($__function)) return static::Core_StaticObject_tMethodProto_emit($__function, $__params); if(NULL !== $__prototype) { $proto = Invoke::normalize($__prototype, $__class); if($proto[0] === $__class && isset($proto[1]) && is_string($proto[1])) return static::Core_StaticObject_tInvoke_method($proto[1], $__params); return isset($proto[1]) ? Invoke::emit($proto[0], $proto[1], $__params) : Invoke::emit($proto[0], $__params); } return NULL; }); $__result = static::Core_StaticObject_tFilter_emit($__function, 'RETURN', $__result, ['return' => $__result]); static::Core_StaticObject_tObserver_emit($__function, [$__result, $__parameters]); static::Core_StaticObject_tSignal_emit($__function, 'POST_EVENT', [$__result, $__parameters], ['return' => $__result]); return $__result; }