fruffl icon

::aspectable()

fruffl | 01/19/13 04:16:21 PM UTC | 0 ⭐ | 256 👁️ | Never ⏰ | []
PHP |

1.76 KB

|

None

|

0 👍

/

0 👎

 
        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;
        }

Comments