ClientCluster.php 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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->checkInstance(call_user_func($value));
  17. }
  18. $initializer = $this->getInitializer($value);
  19. return $this->checkInstance($initializer());
  20. }
  21. protected function getInitializer($fqnOrType) {
  22. switch ($fqnOrType) {
  23. case 'predis':
  24. return function() { return new PredisCluster(); };
  25. default:
  26. return function() use($fqnOrType) {
  27. return new $fqnOrType();
  28. };
  29. }
  30. }
  31. public function getDefault() {
  32. return new PredisCluster();
  33. }
  34. }