1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
<?php
namespace oroboros\core\abstracts\patterns\creational;
abstract class AbstractFactory extends \oroboros\core\abstracts\OroborosBaseAbstract {
const CLASS_SCOPE = \oroboros\core\interfaces\api\ClassScopeApi::CLASS_SCOPE_CREATIONAL_PATTERN;
private $_source;
private $_sources_valid = array();
public function __construct(array $params = array(), array $flags = array()) {
parent::__construct($params, $flags);
}
public function __destruct() {
parent::__destruct();
}
public function initialize(array $params = array(), array $flags = array()) {
parent::initialize($params, $flags);
}
public function load($type, array $params = array(), array $flags = array()) {
$namespace = $this->_getSourceResource() . $type;
$class = new $namespace();
$class->initialize($params, $flags);
return $class;
}
public function fetch($source, $type, array $params = array(), array $flags = array()) {
return $this->source($source)->load($type, $params, $flags);
}
public function source($source) {
if (!$this->_checkSource($source)) {
throw new \oroboros\core\utilities\exception\Exception("Invalid factory source [" . (string) $source . "]", self::ERROR_LOGIC_BAD_PARAMETERS);
}
$this->_setSource($source);
return $this;
}
protected function _validSources(array $sources) {
$this->_setValidSources($sources);
}
protected function _getSourceResource() {
return $this->_sources_valid[$this->_source];
}
protected function _checkSource($source) {
return (array_key_exists($source, $this->_sources_valid));
}
private function _setSource($source) {
$this->_source = $source;
}
private function _setValidSources(array $sources) {
$this->_sources_valid = $sources;
}
}