private function readIoCStructure(XMLReader $classesDOM) { $classes = new IoCClasses(); while ($classesDOM->read()) { if ($classesDOM->name == 'class' || $classesDOM->name == 'factory') { $name = $classesDOM->getAttribute('name'); $alias = $classesDOM->getAttribute('alias'); $scope = $classesDOM->getAttribute('scope'); $alias = $alias ? $alias : $name; switch ($scope) { case 'singleton': $scope = IoCClass::CLASSSCOPE_SINGLETON; break; case 'global': $scope = IoCClass::CLASSSCOPE_GLOBAL; break; default: case 'prototype': $scope = IoCClass::CLASSSCOPE_PROTOTYPE; break; } $class = $classesDOM->name == 'class' ? $classes->createClass($name, $alias, $scope) : $classes->createClassFactory($name, $alias, $scope); $this->setClassConfiguration($class, $classesDOM); } } return $classes; }
class factoryA extends printSelf implements IoCClassFactorable { public function produce($instance) { $instance->producedProperty = 'yes, I was produced in the super factory'; return $instance; } } /* * We need to configure the IoC Factory * telling where it will find the configuration * xml file. * * THIS IS MANDATORY, DEFAULT XML FILE IS NO LONGER AVAILABLE */ $IoCConfiguration = new IoCClasses(); $XMLParser = new IoCXMLParser(); $IoCConfiguration->merge($XMLParser->parseFile(dirname(__FILE__) . '/conf.xml')); /* $IoCConfiguration ->createClass('injected', false, IoCClass::CLASSSCOPE_SINGLETON); */ $IoCConfiguration->createClass('injectionA')->withConstructArg(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_REF, 'injected'))->withConstructArg(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_EVAL, '$_SERVER[\'some\']'))->withConstructArg(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_VALUE, 'some some')); /* $IoCConfiguration->createClass('injectionB') ->createSetter('set_injected') ->withArgument(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_REF, 'injected')); */ $IoCConfiguration->createClass('injectionD')->withConstructArg(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_REF, 'injected'))->createSetter('setCaca')->withArgument(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_EVAL, '$_SERVER[\'some\']'))->withProperty('property', new IoCArgumentValue(IoCArgumentValue::VALUETYPE_VALUE, 'property'))->createSetter('setString')->withArgument(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_VALUE, 'some some')); $IoCConfiguration->createClass('injectionA', 'injASingletonated', IoCClass::CLASSSCOPE_SINGLETON)->withConstructArg(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_REF, 'injected'))->withConstructArg(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_EVAL, '$_SERVER[\'some\']'))->withConstructArg(new IoCArgumentValue(IoCArgumentValue::VALUETYPE_VALUE, 'some some')); //print_r($IoCConfiguration);
public function merge(IoCClasses $anotherClasses) { $this->classes = array_merge($this->classes, $anotherClasses->getClassesArray()); }