<?php
class TaskQueue {
private $queue = [];
private $logFile = 'task_queue.log';
public function enqueue(string $date, callable $task): void {
// Add task to the queue with date
$this->queue[] = ['date' => $date, 'task' => $task];
}
public function process(): void {
$this->log('Starting task processing...');
$this->queue = $this->queue ?: []; // Ensure queue is not null
foreach ($this->queue as $taskData) {
$date = $taskData['date'];
$task = $taskData['task'];
try {
$task($date); // Execute the task
$this->log("Task executed successfully for date: $date");
} catch (Exception $e) {
$this->log("Error executing task for date: $date - " . $e->getMessage());
}
}
$this->log('Task processing completed.');
}
private function log(string $message): void {
$timestamp = date('Y-m-d H:i:s');
$logEntry = "[$timestamp] $message\n";
file_put_contents($this->logFile, $logEntry, FILE_APPEND);
}
}
//Example usage:
$queue = new TaskQueue();
//Define some tasks
function task1(string $date): void {
echo "Executing task 1 for date: $date\n";
}
function task2(string $date): void {
echo "Executing task 2 for date: $date\n";
throw new Exception("Simulated error in task 2");
}
//Enqueue tasks
$queue->enqueue('2024-10-26', 'task1');
$queue->enqueue('2024-10-27', 'task2');
$queue->enqueue('2024-10-26', 'task1');
//Process the queue
$queue->process();
?>
Add your comment