return $this->duedate; } function getTags() { return $this->tags; } } // Runtime Environment function enumerateProject(Project $project) { print "{$project->getTitle()}({$project->getSummary()}): \n"; foreach ($project->getToDos() as $eachToDo) { if ($eachToDo instanceof Project) { print "sub:"; enumerateProject($eachToDo); } else { print "{$eachToDo->getTitle()}\n"; } } } $project = new Project("Get Groceries", "grocery list", null, array()); $meatProject = new Project("Meat Time", "meat list", null, array()); $project->addToDo(new SimpleToDo("Milk", null, array())); $project->addToDo($meatProject); $meatProject->addToDo(new SimpleToDo("Beef", null, array())); $chicken = new Project("Chicken", "", null, array()); $meatProject->addToDo($chicken); $chicken->addToDo(new SimpleToDo("Fried Chicken", null, array())); $chicken->addToDo(new SimpleToDo("Grilled Chicken", null, array())); $project->addToDo(new SimpleToDo("Water", null, array())); enumerateProject($project);