<?php
class TaskQueue {
private $tasks = [];
public function addTask(string $taskName, callable $taskFunction, array $dependencies = []): bool {
// Basic validation: task name must not be empty
if (empty($taskName)) {
return false;
}
// Store task information
$this->tasks[] = [
'name' => $taskName,
'function' => $taskFunction,
'dependencies' => $dependencies,
'status' => 'pending'
];
return true;
}
public function executeTasks(): void {
foreach ($this->tasks as $task) {
if ($this->canExecuteTask($task)) {
$this->executeTask($task);
}
}
}
private function canExecuteTask(array $task): bool {
// Check dependencies
foreach ($task['dependencies'] as $dependencyName) {
$dependency = $this->findTask($dependencyName);
if ($dependency && $dependency['status'] !== 'completed') {
return false; // Dependency not met
}
}
return true;
}
private function executeTask(array $task): void {
// Execute the task
try {
$task['function']();
$task['status'] = 'completed';
echo "Task '$task['name']' executed successfully.\n";
} catch (Exception $e) {
$task['status'] = 'failed';
echo "Error executing task '$task['name']': " . $e->getMessage() . "\n";
}
}
private function findTask(string $taskName): ?array {
foreach ($this->tasks as $task) {
if ($task['name'] === $taskName) {
return $task;
}
}
return null;
}
}
// Example Usage
$taskQueue = new TaskQueue();
// Define some tasks
$taskQueue->addTask('Task1', function () { echo "Executing Task 1...\n"; });
$taskQueue->addTask('Task2', function () { echo "Executing Task 2...\n"; }, ['Task1']);
$taskQueue->addTask('Task3', function () { echo "Executing Task 3...\n"; }, ['Task2']);
$taskQueue->addTask('Task4', function () { echo "Executing Task 4...\n"; });
// Execute the tasks
$taskQueue->executeTasks();
?>
Add your comment