ProcessorChain.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace Predis\Commands\Processors;
  3. use Predis\Commands\ICommand;
  4. class ProcessorChain implements ICommandProcessorChain, \ArrayAccess
  5. {
  6. private $_processors;
  7. public function __construct($processors = array())
  8. {
  9. foreach ($processors as $processor) {
  10. $this->add($processor);
  11. }
  12. }
  13. public function add(ICommandProcessor $processor)
  14. {
  15. $this->_processors[] = $processor;
  16. }
  17. public function remove(ICommandProcessor $processor)
  18. {
  19. $index = array_search($processor, $this->_processors, true);
  20. if ($index !== false) {
  21. unset($this[$index]);
  22. }
  23. }
  24. public function process(ICommand $command)
  25. {
  26. $count = count($this->_processors);
  27. for ($i = 0; $i < $count; $i++) {
  28. $this->_processors[$i]->process($command);
  29. }
  30. }
  31. public function getProcessors()
  32. {
  33. return $this->_processors;
  34. }
  35. public function getIterator()
  36. {
  37. return new \ArrayIterator($this->_processors);
  38. }
  39. public function count()
  40. {
  41. return count($this->_processors);
  42. }
  43. public function offsetExists($index)
  44. {
  45. return isset($this->_processors[$index]);
  46. }
  47. public function offsetGet($index)
  48. {
  49. return $this->_processors[$index];
  50. }
  51. public function offsetSet($index, $processor)
  52. {
  53. if (!$processor instanceof ICommandProcessor) {
  54. throw new \InvalidArgumentException(
  55. 'A processor chain can hold only instances of classes implementing '.
  56. 'the Predis\Commands\Preprocessors\ICommandProcessor interface'
  57. );
  58. }
  59. $this->_processors[$index] = $processor;
  60. }
  61. public function offsetUnset($index)
  62. {
  63. unset($this->_processors[$index]);
  64. }
  65. }