Chris@0: Chris@0: */ Chris@0: Chris@0: namespace WebDriver; Chris@0: Chris@0: /** Chris@0: * WebDriver\ServiceFactory class Chris@0: * Chris@0: * A service factory Chris@0: * Chris@0: * @package WebDriver Chris@0: */ Chris@0: final class ServiceFactory Chris@0: { Chris@0: /** Chris@0: * singleton Chris@0: * Chris@0: * @var \WebDriver\ServiceFactory Chris@0: */ Chris@0: private static $instance; Chris@0: Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@0: protected $services; Chris@0: Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@0: protected $serviceClasses; Chris@0: Chris@0: /** Chris@0: * Private constructor Chris@0: */ Chris@0: private function __construct() Chris@0: { Chris@0: $this->services = array(); Chris@0: Chris@0: $this->serviceClasses = array( Chris@0: 'service.curl' => '\\WebDriver\\Service\\CurlService', Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get singleton instance Chris@0: * Chris@0: * @return \WebDriver\ServiceFactory Chris@0: */ Chris@0: public static function getInstance() Chris@0: { Chris@0: if (!self::$instance) { Chris@0: self::$instance = new self; Chris@0: } Chris@0: Chris@0: return self::$instance; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get service Chris@0: * Chris@0: * @param string $serviceName Name of service Chris@0: * Chris@0: * @return object Chris@0: */ Chris@0: public function getService($serviceName) Chris@0: { Chris@0: if (!isset($this->services[$serviceName])) { Chris@0: $className = $this->serviceClasses[$serviceName]; Chris@0: Chris@0: $this->services[$serviceName] = new $className; Chris@0: } Chris@0: Chris@0: return $this->services[$serviceName]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Set service Chris@0: * Chris@0: * @param string $serviceName Name of service Chris@0: * @param object $service Service instance Chris@0: */ Chris@0: public function setService($serviceName, $service) Chris@0: { Chris@0: $this->services[$serviceName] = $service; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Override default service class Chris@0: * Chris@0: * @param string $serviceName Name of service Chris@0: * @param string $className Name of service class Chris@0: */ Chris@0: public function setServiceClass($serviceName, $className) Chris@0: { Chris@0: if (substr($className, 0, 1) !== '\\') { Chris@0: $className = '\\' . $className; Chris@0: } Chris@0: Chris@0: $this->serviceClasses[$serviceName] = $className; Chris@0: $this->services[$serviceName] = null; Chris@0: } Chris@0: }