Current File : /home/aventura/www/site/wp-content/plugins/victheme_core/wordpress/models/factories.php |
<?php
/**
* Model class for creating a class that
* contains multiple factory and use dotted
* notation to fetch, add and destroy registered
* factory.
*
* @author jason.xie@victheme.com
*
*/
abstract class VTCore_Wordpress_Models_Factories {
/**
* Variable for storing the factories
* staticly
* @var array|\VTCore_Wordpress_Objects_Array
*/
static protected $factories;
public function __construct() {
if (empty(self::$factories)) {
self::$factories = new VTCore_Wordpress_Objects_Array();
}
$this->register();
}
/**
* Register the factories in this method
* @return mixed
*/
abstract function register();
/**
* Allow user to inject Factory Dynamically
* @param $name
* @param $object
*/
public static function setFactory($name, $object) {
if (is_object($object)) {
self::$factories->add($name, $object);
}
}
/**
* Retrieves stored factory singleton object.
* @param string $type the factory type
* @return stored factory object.
*/
public static function getFactory($type) {
return self::$factories->get($type);
}
/**
* Get all available factories
*/
public static function getFactories() {
return self::$factories->extract();
}
/**
* Get the factory collection object.
* @return array|\VTCore_Wordpress_Objects_Array
*/
public static function getObject() {
return self::$factories;
}
/**
* Clear all factory caches
*/
public static function factoriesClearCache() {
foreach (self::getFactories() as $factory) {
if ($factory instanceof VTCore_Wordpress_Interfaces_Factory) {
$factory->clearCache();
}
}
}
}