<?php
/**
* Task Queue Manager for CLI Arguments.
* Supports older PHP versions (5.3+).
*/
class TaskQueueManager
{
private $tasks = [];
/**
* Adds a task to the queue.
* @param callable $task The callable (function) to execute.
* @param array $args Arguments to pass to the task.
*/
public function enqueue(callable $task, array $args = []): void
{
$this->tasks[] = [
'task' => $task,
'args' => $args,
];
}
/**
* Processes tasks from the queue.
* @return void
*/
public function process(): void
{
while (!empty($this->tasks)) {
$task = array_shift($this->tasks); // Get the next task.
$task_type = $task['task'];
$args = $task['args'];
try {
if (is_callable($task_type)) {
$task_type($args); // Execute the task.
} else {
throw new Exception("Invalid task type: " . gettype($task_type));
}
} catch (Exception $e) {
echo "Error executing task: " . $e->getMessage() . PHP_EOL;
}
}
}
}
// Example usage (for testing):
if (PHP_SAPI === 'cli') {
$queueManager = new TaskQueueManager();
// Define some example tasks
function task1(array $args) {
echo "Task 1 executed with arguments: " . implode(", ", $args) . PHP_EOL;
}
function task2(array $args) {
echo "Task 2 executed with arguments: " . implode(", ", $args) . PHP_EOL;
}
// Enqueue tasks
$queueManager->enqueue('task1', ['arg1', 'arg2']);
$queueManager->enqueue('task2', ['arg3']);
$queueManager->enqueue('task1', ['arg4', 'arg5']);
// Process the queue
$queueManager->process();
}
?>
Add your comment