1. <?php
  2. class TaskQueue {
  3. private $tasks = [];
  4. public function addTask(string $taskName, callable $taskFunction, array $dependencies = []): bool {
  5. // Basic validation: task name must not be empty
  6. if (empty($taskName)) {
  7. return false;
  8. }
  9. // Store task information
  10. $this->tasks[] = [
  11. 'name' => $taskName,
  12. 'function' => $taskFunction,
  13. 'dependencies' => $dependencies,
  14. 'status' => 'pending'
  15. ];
  16. return true;
  17. }
  18. public function executeTasks(): void {
  19. foreach ($this->tasks as $task) {
  20. if ($this->canExecuteTask($task)) {
  21. $this->executeTask($task);
  22. }
  23. }
  24. }
  25. private function canExecuteTask(array $task): bool {
  26. // Check dependencies
  27. foreach ($task['dependencies'] as $dependencyName) {
  28. $dependency = $this->findTask($dependencyName);
  29. if ($dependency && $dependency['status'] !== 'completed') {
  30. return false; // Dependency not met
  31. }
  32. }
  33. return true;
  34. }
  35. private function executeTask(array $task): void {
  36. // Execute the task
  37. try {
  38. $task['function']();
  39. $task['status'] = 'completed';
  40. echo "Task '$task['name']' executed successfully.\n";
  41. } catch (Exception $e) {
  42. $task['status'] = 'failed';
  43. echo "Error executing task '$task['name']': " . $e->getMessage() . "\n";
  44. }
  45. }
  46. private function findTask(string $taskName): ?array {
  47. foreach ($this->tasks as $task) {
  48. if ($task['name'] === $taskName) {
  49. return $task;
  50. }
  51. }
  52. return null;
  53. }
  54. }
  55. // Example Usage
  56. $taskQueue = new TaskQueue();
  57. // Define some tasks
  58. $taskQueue->addTask('Task1', function () { echo "Executing Task 1...\n"; });
  59. $taskQueue->addTask('Task2', function () { echo "Executing Task 2...\n"; }, ['Task1']);
  60. $taskQueue->addTask('Task3', function () { echo "Executing Task 3...\n"; }, ['Task2']);
  61. $taskQueue->addTask('Task4', function () { echo "Executing Task 4...\n"; });
  62. // Execute the tasks
  63. $taskQueue->executeTasks();
  64. ?>

Add your comment