1. <?php
  2. class TaskQueue {
  3. private $queue = [];
  4. private $logFile = 'task_queue.log';
  5. public function enqueue(string $date, callable $task): void {
  6. // Add task to the queue with date
  7. $this->queue[] = ['date' => $date, 'task' => $task];
  8. }
  9. public function process(): void {
  10. $this->log('Starting task processing...');
  11. $this->queue = $this->queue ?: []; // Ensure queue is not null
  12. foreach ($this->queue as $taskData) {
  13. $date = $taskData['date'];
  14. $task = $taskData['task'];
  15. try {
  16. $task($date); // Execute the task
  17. $this->log("Task executed successfully for date: $date");
  18. } catch (Exception $e) {
  19. $this->log("Error executing task for date: $date - " . $e->getMessage());
  20. }
  21. }
  22. $this->log('Task processing completed.');
  23. }
  24. private function log(string $message): void {
  25. $timestamp = date('Y-m-d H:i:s');
  26. $logEntry = "[$timestamp] $message\n";
  27. file_put_contents($this->logFile, $logEntry, FILE_APPEND);
  28. }
  29. }
  30. //Example usage:
  31. $queue = new TaskQueue();
  32. //Define some tasks
  33. function task1(string $date): void {
  34. echo "Executing task 1 for date: $date\n";
  35. }
  36. function task2(string $date): void {
  37. echo "Executing task 2 for date: $date\n";
  38. throw new Exception("Simulated error in task 2");
  39. }
  40. //Enqueue tasks
  41. $queue->enqueue('2024-10-26', 'task1');
  42. $queue->enqueue('2024-10-27', 'task2');
  43. $queue->enqueue('2024-10-26', 'task1');
  44. //Process the queue
  45. $queue->process();
  46. ?>

Add your comment