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