Php 限制我的表单生成器脚本中的依赖项

Php 限制我的表单生成器脚本中的依赖项,php,oop,Php,Oop,我制作了一个小php脚本,它生成一个html表单。 脚本由两部分组成,表单和表单元素 现在,当我需要表格时,我可以这样做: $form = new Form(); $checkbox = new Checkbox(); $checkbox->setLabel('Label'); $checkbox->setData('data'); $form->addElement($checkbox); $textarea = new Textarea(); $textarea->s

我制作了一个小php脚本,它生成一个html表单。 脚本由两部分组成,表单和表单元素

现在,当我需要表格时,我可以这样做:

$form = new Form();
$checkbox = new Checkbox();
$checkbox->setLabel('Label');
$checkbox->setData('data');
$form->addElement($checkbox);
$textarea = new Textarea();
$textarea->setData('data');
$radio = new Radio();
$form->addElement($textarea);
$form->addElement($radio);
问题是,当我有一个包含很多不同元素的大表单时,我的模型或控制器有很多use语句,指向不同的表单元素

我对OOP很陌生,但人们告诉我,很多依赖是一种糟糕的做法

限制这些依赖关系的最佳方法是什么

我应该创建另一个包含所有表单依赖项的类,并使用该类仅具有1个依赖项,还是有更好的方法

谢谢

class Form
{
    ...
    public function add($element)
    {
        ...

        return $this;
    }
}

class Checkbox extends FormElement
{
    ...
    public function __construct($data = null, $label = null)
    {
        ...
    }
}
现在你可以:

$form = new Form();
$form
    ->add(new Checkbox('data', 'Label'))
    ->add(new Textarea('data'))
    ->add(new Radio('data'));
或者您可以查看Symfony的表单组件(,)

Symfony的方法是使用“标记”,即表示表单元素实例的字符串名称(实现接口以确保某些方法),因此您可以通过配置更改这些依赖关系


嗯,看来你喜欢它!然后,您必须实现一种表单管理器来按名称获取实例,祝您好运

嗨,谢谢你的回答。我确实喜欢它给我的更短的代码,但是这样我的控制器/模型对表单和元素仍然有4个依赖项,对吗?编辑:哦,谢谢你的阅读,我看到他们已经为我的问题实施了一个解决方案!是的,您是对的,但由于您试图在不同的类中分离表单元素(这是件好事),所以无法避免这些依赖关系。