Head-First-Design-Patterns icon indicating copy to clipboard operation
Head-First-Design-Patterns copied to clipboard

Composite Iterator with PHP

Open matiux opened this issue 7 years ago • 1 comments

Hi, I have a problem with printVegetarianMenu() methos in Composite Iterator Pattern. This is my method:

    public function printVegetarianMenu()
    {
        $iterator = $this->allMenus->createIterator();

        echo sprintf("\nVEGETARIAN MENU\n----");

        while ($iterator->valid()) {

            /** @var MenuComponent $menuComponent */
            $menuComponent = $iterator->current();
            $iterator->next();

            try {

                if ($menuComponent->isVegetarian()) {

                    $menuComponent->print();
                }
            } catch (\LogicException $e) {}
        }
    }

I do not know if it's a difference between java and PHP but my method doesn't print nothing because the while condition iterate only over menus so, obviusly the isVegetarian() method throws always an exception.

Do you have any idea about it?

matiux avatar Jul 13 '18 15:07 matiux

may be $menuComponent must be a not menuComponent class? extender MenuItem implements isVegetarian() as getter, not thower of exception, like a parent.

Woolfy80 avatar Mar 25 '19 01:03 Woolfy80