ClientCluster.php 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. namespace Predis\Options;
  3. use Predis\Network\IConnectionCluster;
  4. use Predis\Network\PredisCluster;
  5. class ClientCluster extends Option {
  6. protected function checkInstance($cluster) {
  7. if (!$cluster instanceof IConnectionCluster) {
  8. throw new \InvalidArgumentException(
  9. 'Instance of Predis\Network\IConnectionCluster expected'
  10. );
  11. }
  12. return $cluster;
  13. }
  14. public function validate($value) {
  15. if (is_callable($value)) {
  16. return $this->initializeFromCallable($value);
  17. }
  18. $initializer = $this->getInitializer($value);
  19. return $this->checkInstance($initializer());
  20. }
  21. protected function initializeFromCallable($callable) {
  22. return $this->checkInstance(call_user_func($callable));
  23. }
  24. protected function getInitializer($fqnOrType) {
  25. switch ($fqnOrType) {
  26. case 'predis':
  27. return function() { return new PredisCluster(); };
  28. default:
  29. return function() use($fqnOrType) {
  30. return new $fqnOrType();
  31. };
  32. }
  33. }
  34. public function getDefault() {
  35. return new PredisCluster();
  36. }
  37. }