. * * The copyright holder may be reached by emailing john@kleijnweb.nl * * * * @copyright Copyright (C) 2010 Kleijn Web Development * @license http://www.gnu.org/licenses/gpl.txt GNU General Public License */ namespace kwd\blog\virtualproxy; /** * Factory for virtual proxies * * @category virtualproxy * @package kwd\blog\virtualproxy */ class ProxyFactory { /** * @var kwd\blog\virtualproxy\ProxyGenerator */ private $_generator; /** * Create a new factory * * @param ProxyGenerator $generator */ public function __construct(ProxyGenerator $generator) { $this->_generator = $generator; } /** * Construct a proxy * * @param string $subjectName * @param kwd\blog\virtualproxy\Loader * @param array $constructionArgs * @return object */ public function createProxy($subjectName, Loader $loader, array $constructionArgs = array()) { $proxyName = $this->_generator->getProxyName($subjectName); if(!class_exists($proxyName, true)) { if(eval($this->_generator->generate($subjectName)) !== null) { throw new Exception("Generation of proxy failed"); } } $refl = new \ReflectionClass($proxyName); if($refl->hasMethod('__construct')) { $proxy = $refl->newInstanceArgs($constructionArgs); } else { $proxy = new $proxyName; } $property = $refl->getProperty('_loader'); $property->setAccessible(true); $property->setValue($proxy, $loader); return $proxy; } }