public function __call($name, $arguments) { if (!QueryPathExtensionRegistry::$useRegistry) { throw new QueryPathException("No method named {$name} found (Extensions disabled)."); } if (empty($this->ext)) { $this->ext = QueryPathExtensionRegistry::getExtensions($this); } if (!empty($this->ext) && QueryPathExtensionRegistry::hasMethod($name)) { $owner = QueryPathExtensionRegistry::getMethodClass($name); $method = new ReflectionMethod($owner, $name); return $method->invokeArgs($this->ext[$owner], $arguments); } throw new QueryPathException("No method named {$name} found. Possibly missing an extension."); }
/** * Call extension methods. * * This function is used to invoke extension methods. It searches the * registered extenstensions for a matching function name. If one is found, * it is executed with the arguments in the $arguments array. * * @throws QueryPathException * An exception is thrown if a non-existent method is called. */ public function __call($name, $arguments) { if (!QueryPathExtensionRegistry::$useRegistry) { throw new QueryPathException("No method named {$name} found (Extensions disabled)."); } // Loading of extensions is deferred until the first time a // non-core method is called. This makes constructing faster, but it // may make the first invocation of __call() slower (if there are // enough extensions.) // // The main reason for moving this out of the constructor is that most // new QueryPath instances do not use extensions. Charging qp() calls // with the additional hit is not a good idea. // // Also, this will at least limit the number of circular references. if (empty($this->ext)) { // Load the registry $this->ext = QueryPathExtensionRegistry::getExtensions($this); } // Note that an empty ext registry indicates that extensions are disabled. if (!empty($this->ext) && QueryPathExtensionRegistry::hasMethod($name)) { $owner = QueryPathExtensionRegistry::getMethodClass($name); $method = new ReflectionMethod($owner, $name); return $method->invokeArgs($this->ext[$owner], $arguments); } throw new QueryPathException("No method named {$name} found. Possibly missing an extension."); }