ClientOptions.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace Predis;
  3. use Predis\Options\IOption;
  4. use Predis\Options\ClientProfile;
  5. use Predis\Options\ClientCluster;
  6. use Predis\Options\ClientConnectionFactory;
  7. class ClientOptions {
  8. private $_handlers, $_options;
  9. private static $_sharedOptions;
  10. public function __construct(Array $options = array()) {
  11. $this->initialize($options);
  12. }
  13. private static function getSharedOptions() {
  14. if (isset(self::$_sharedOptions)) {
  15. return self::$_sharedOptions;
  16. }
  17. self::$_sharedOptions = array(
  18. 'profile' => new ClientProfile(),
  19. 'connections' => new ClientConnectionFactory(),
  20. 'cluster' => new ClientCluster(),
  21. );
  22. return self::$_sharedOptions;
  23. }
  24. public static function define($option, IOption $handler) {
  25. self::getSharedOptions();
  26. self::$_sharedOptions[$option] = $handler;
  27. }
  28. public static function undefine($option) {
  29. self::getSharedOptions();
  30. unset(self::$_sharedOptions[$option]);
  31. }
  32. private function initialize($options) {
  33. $this->_handlers = self::getSharedOptions();
  34. foreach ($options as $option => $value) {
  35. if (isset($this->_handlers[$option])) {
  36. $handler = $this->_handlers[$option];
  37. $this->_options[$option] = $handler($value);
  38. }
  39. }
  40. }
  41. public function __get($option) {
  42. if (isset($this->_options[$option])) {
  43. return $this->_options[$option];
  44. }
  45. if (isset($this->_handlers[$option])) {
  46. $opts = self::getSharedOptions();
  47. $value = $opts[$option]->getDefault();
  48. $this->_options[$option] = $value;
  49. return $value;
  50. }
  51. return null;
  52. }
  53. }