public static function getExtensions(Query $qp) { $extInstances = array(); foreach (self::$extensionRegistry as $ext) { $extInstances[$ext] = new $ext($qp); } return $extInstances; }
/** * 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 QueryPath::Exception * An exception is thrown if a non-existent method is called. */ public function __call($name, $arguments) { if (!ExtensionRegistry::$useRegistry) { throw new \QueryPath\Exception("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 DOMQuery 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 = ExtensionRegistry::getExtensions($this); } // Note that an empty ext registry indicates that extensions are disabled. if (!empty($this->ext) && ExtensionRegistry::hasMethod($name)) { $owner = ExtensionRegistry::getMethodClass($name); $method = new \ReflectionMethod($owner, $name); return $method->invokeArgs($this->ext[$owner], $arguments); } throw new \QueryPath\Exception("No method named {$name} found. Possibly missing an extension."); }