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.");
}