diff --git a/core/Object.php b/core/Object.php index 3607e4ac9..ce0464377 100755 --- a/core/Object.php +++ b/core/Object.php @@ -726,16 +726,17 @@ abstract class Object { * @return mixed */ public function __call($method, $arguments) { + $class = get_class($this); // If the method cache was cleared by an an Object::add_extension() / Object::remove_extension() // call, then we should rebuild it. - if(empty(self::$extra_methods[get_class($this)])) { + if(empty(self::$extra_methods[$class])) { $this->defineMethods(); } $method = strtolower($method); - if(isset(self::$extra_methods[$this->class][$method])) { - $config = self::$extra_methods[$this->class][$method]; + if(isset(self::$extra_methods[$class][$method])) { + $config = self::$extra_methods[$class][$method]; switch(true) { case isset($config['property']) : @@ -752,11 +753,11 @@ abstract class Object { if($this->destroyed) { throw new Exception ( - "Object->__call(): attempt to call $method on a destroyed $this->class object" + "Object->__call(): attempt to call $method on a destroyed $class object" ); } else { throw new Exception ( - "Object->__call(): $this->class cannot pass control to $config[property]($config[index])." + "Object->__call(): $class cannot pass control to $config[property]($config[index])." . ' Perhaps this object was mistakenly destroyed?' ); } @@ -770,13 +771,12 @@ abstract class Object { default : throw new Exception ( - "Object->__call(): extra method $method is invalid on $this->class:" + "Object->__call(): extra method $method is invalid on $class:" . var_export($config, true) ); } } else { // Please do not change the exception code number below. - $class = get_class($this); throw new Exception("Object->__call(): the method '$method' does not exist on '$class', or the method is not public.", 2175); } } @@ -793,7 +793,7 @@ abstract class Object { * @return bool */ public function hasMethod($method) { - return method_exists($this, $method) || isset(self::$extra_methods[$this->class][strtolower($method)]); + return method_exists($this, $method) || isset(self::$extra_methods[get_class($this)][strtolower($method)]); } /** @@ -803,14 +803,15 @@ abstract class Object { * @return array */ public function allMethodNames($custom = false) { - if(!isset(self::$built_in_methods[$this->class])) { - self::$built_in_methods[$this->class] = array_map('strtolower', get_class_methods($this)); + $class = get_class($this); + if(!isset(self::$built_in_methods[$class])) { + self::$built_in_methods[$class] = array_map('strtolower', get_class_methods($this)); } - if($custom && isset(self::$extra_methods[$this->class])) { - return array_merge(self::$built_in_methods[$this->class], array_keys(self::$extra_methods[$this->class])); + if($custom && isset(self::$extra_methods[$class])) { + return array_merge(self::$built_in_methods[$class], array_keys(self::$extra_methods[$class])); } else { - return self::$built_in_methods[$this->class]; + return self::$built_in_methods[$class]; } } @@ -826,11 +827,12 @@ abstract class Object { $this->addMethodsFrom('extension_instances', $key); } - if(isset($_REQUEST['debugmethods']) && isset(self::$built_in_methods[$this->class])) { + $class = get_class($this); + if(isset($_REQUEST['debugmethods']) && isset(self::$built_in_methods[$class])) { Debug::require_developer_login(); - echo '

Methods defined on ' . $this->class . '