1. <?php
  2. /**
  3. * Task Queue Manager for CLI Arguments.
  4. * Supports older PHP versions (5.3+).
  5. */
  6. class TaskQueueManager
  7. {
  8. private $tasks = [];
  9. /**
  10. * Adds a task to the queue.
  11. * @param callable $task The callable (function) to execute.
  12. * @param array $args Arguments to pass to the task.
  13. */
  14. public function enqueue(callable $task, array $args = []): void
  15. {
  16. $this->tasks[] = [
  17. 'task' => $task,
  18. 'args' => $args,
  19. ];
  20. }
  21. /**
  22. * Processes tasks from the queue.
  23. * @return void
  24. */
  25. public function process(): void
  26. {
  27. while (!empty($this->tasks)) {
  28. $task = array_shift($this->tasks); // Get the next task.
  29. $task_type = $task['task'];
  30. $args = $task['args'];
  31. try {
  32. if (is_callable($task_type)) {
  33. $task_type($args); // Execute the task.
  34. } else {
  35. throw new Exception("Invalid task type: " . gettype($task_type));
  36. }
  37. } catch (Exception $e) {
  38. echo "Error executing task: " . $e->getMessage() . PHP_EOL;
  39. }
  40. }
  41. }
  42. }
  43. // Example usage (for testing):
  44. if (PHP_SAPI === 'cli') {
  45. $queueManager = new TaskQueueManager();
  46. // Define some example tasks
  47. function task1(array $args) {
  48. echo "Task 1 executed with arguments: " . implode(", ", $args) . PHP_EOL;
  49. }
  50. function task2(array $args) {
  51. echo "Task 2 executed with arguments: " . implode(", ", $args) . PHP_EOL;
  52. }
  53. // Enqueue tasks
  54. $queueManager->enqueue('task1', ['arg1', 'arg2']);
  55. $queueManager->enqueue('task2', ['arg3']);
  56. $queueManager->enqueue('task1', ['arg4', 'arg5']);
  57. // Process the queue
  58. $queueManager->process();
  59. }
  60. ?>

Add your comment