_elements as $element) { $formCode .= $element->render(); } return $formCode; } public function addElement(FormElement $element) { $this->_elements[] = $element; } } abstract class FormElement { abstract public function render(); } class TextElement extends FormElement { public function render() { return 'this is a text element'; } } class InputElement extends FormElement { public function render() { return ''; } } $form = new Form(); $form->addElement(new TextElement()); $form->addElement(new InputElement()); echo $form->render();