diff options
Diffstat (limited to 'system/core')
-rw-r--r-- | system/core/Hooks.php | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/system/core/Hooks.php b/system/core/Hooks.php index aa7ac1e5d..aa62e680b 100644 --- a/system/core/Hooks.php +++ b/system/core/Hooks.php @@ -54,6 +54,13 @@ class CI_Hooks { public $hooks = array(); /** + * Array with class objects to use hooks methods + * + * @var array + */ + public $class = array(); + + /** * In progress flag * * Determines whether hook is in progress, used to prevent infinte loops @@ -195,15 +202,33 @@ class CI_Hooks { // Call the requested class and/or function if ($class !== FALSE) { - class_exists($class, FALSE) OR require_once($filepath); - - if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function)) + // The object is stored? + if (isset($this->class[$class]) && method_exists($this->class[$class], $function)) { - return $this->_in_progress = FALSE; + $this->class[$class]->$function($params); + } + else + { + class_exists($class, FALSE) OR require_once($filepath); + + if ( ! class_exists($class, FALSE) OR ! method_exists($class, $function)) + { + return $this->_in_progress = FALSE; + } + + // If the developer wants the object to be stored + if (isset($data['store_object']) && $data['store_object'] === TRUE) + { + $this->class[$class] = new $class(); + $HOOK =& $this->class[$class]; + } + else + { + $HOOK = new $class(); + } + + $HOOK->$function($params); } - - $HOOK = new $class(); - $HOOK->$function($params); } else { @@ -224,4 +249,4 @@ class CI_Hooks { } /* End of file Hooks.php */ -/* Location: ./system/core/Hooks.php */
\ No newline at end of file +/* Location: ./system/core/Hooks.php */ |