attach() public méthode

public attach ( Element $element )
$element Element
        $visitor->visitCroncreteElementB($this);
    }
}
class ObjectStructure
{
    private $_elements = array();
    public function attach($element)
    {
        $this->_elements[] = $element;
    }
    public function detach($element)
    {
        if ($key = array_search($element, $this->_elements) !== false) {
            unset($this->_elements[$key]);
        }
    }
    public function accept($visitor)
    {
        foreach ($this->_elements as $element) {
            $element->accept($visitor);
        }
    }
}
//
$objOS = new ObjectStructure();
$objOS->attach(new ConcreteElementA());
$objOS->attach(new ConcreteElementB());
$objCV1 = new ConcreteVisitor1();
$objCV2 = new ConcreteVisitor2();
$objOS->accept($objCV1);
$objOS->accept($objCV2);
    {
        return array_push($this->_collection, $element);
    }
    public function detach(Element $element)
    {
        $index = array_search($element, $this->_collection);
        if ($index !== FALSE) {
            unset($this->_collection[$index]);
        }
        return $index;
    }
    public function accept(Visitor $visitor)
    {
        foreach ($this->_collection as $element) {
            $element->accept($visitor);
        }
    }
}
// client
$elementA = new ConcreteElementA("ElementA");
$elementB = new ConcreteElementB("ElementB");
$elementA2 = new ConcreteElementB("ElementA2");
$visitor1 = new ConcreteVisitor1();
$visitor2 = new ConcreteVisitor2();
$os = new ObjectStructure();
$os->attach($elementA);
$os->attach($elementB);
$os->attach($elementA2);
$os->detach($elementA);
$os->accept($visitor1);
$os->accept($visitor2);