ClientOptions.php 1.9 KB

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