Example #1
0
 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.");
 }
Example #2
0
 /**
  * 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.");
 }