pluginInstances = []; } /** * Determines if a plugin instance exists. * * @param string $instance_id * The ID of the plugin instance to check. * * @return bool * TRUE if the plugin instance exists, FALSE otherwise. */ public function has($instance_id) { return isset($this->pluginInstances[$instance_id]) || isset($this->instanceIDs[$instance_id]); } /** * Gets a plugin instance, initializing it if necessary. * * @param string $instance_id * The ID of the plugin instance being retrieved. */ public function &get($instance_id) { if (!isset($this->pluginInstances[$instance_id])) { $this->initializePlugin($instance_id); } return $this->pluginInstances[$instance_id]; } /** * Stores an initialized plugin. * * @param string $instance_id * The ID of the plugin instance being stored. * @param mixed $value * An instantiated plugin. */ public function set($instance_id, $value) { $this->pluginInstances[$instance_id] = $value; $this->addInstanceId($instance_id); } /** * Removes an initialized plugin. * * The plugin can still be used; it will be reinitialized. * * @param string $instance_id * The ID of the plugin instance to remove. */ public function remove($instance_id) { unset($this->pluginInstances[$instance_id]); } /** * Adds an instance ID to the available instance IDs. * * @param string $id * The ID of the plugin instance to add. * @param array|null $configuration * (optional) The configuration used by this instance. Defaults to NULL. */ public function addInstanceId($id, $configuration = NULL) { if (!isset($this->instanceIDs[$id])) { $this->instanceIDs[$id] = $id; } } /** * Gets all instance IDs. * * @return array * An array of all available instance IDs. */ public function getInstanceIds() { return $this->instanceIDs; } /** * Removes an instance ID. * * @param string $instance_id * The ID of the plugin instance to remove. */ public function removeInstanceId($instance_id) { unset($this->instanceIDs[$instance_id]); $this->remove($instance_id); } public function getIterator() { $instances = []; foreach ($this->getInstanceIds() as $instance_id) { $instances[$instance_id] = $this->get($instance_id); } return new \ArrayIterator($instances); } /** * {@inheritdoc} */ public function count() { return count($this->instanceIDs); } }