Module.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. /**
  3. * Credis_Module
  4. *
  5. * Implements Redis Modules support. see http://redismodules.com
  6. *
  7. * @author Igor Veremchuk <igor.veremchuk@gmail.com>
  8. * @license http://www.opensource.org/licenses/mit-license.php The MIT License
  9. * @package Credis_Module
  10. */
  11. class Credis_Module
  12. {
  13. const MODULE_COUNTING_BLOOM_FILTER = 'CBF';
  14. /** @var Credis_Client */
  15. protected $client;
  16. /** @var string */
  17. protected $moduleName;
  18. /**
  19. * @param Credis_Client $client
  20. * @param string $module
  21. */
  22. public function __construct(Credis_Client $client, $module = null)
  23. {
  24. $client->forceStandalone(); // Redis Modules command not currently supported by phpredis
  25. $this->client = $client;
  26. if (isset($module)) {
  27. $this->setModule($module);
  28. }
  29. }
  30. /**
  31. * Clean up client on destruct
  32. */
  33. public function __destruct()
  34. {
  35. $this->client->close();
  36. }
  37. /**
  38. * @param $moduleName
  39. * @return $this
  40. */
  41. public function setModule($moduleName)
  42. {
  43. $this->moduleName = (string) $moduleName;
  44. return $this;
  45. }
  46. /**
  47. * @param string $name
  48. * @param string $args
  49. * @return mixed
  50. */
  51. public function __call($name, $args)
  52. {
  53. if ($this->moduleName === null) {
  54. throw new \LogicException('Module must be set.');
  55. }
  56. return call_user_func(array($this->client, sprintf('%s.%s', $this->moduleName, $name)), $args);
  57. }
  58. }