我正处于构建一系列类的早期阶段,这些类将在PHP中构建各种类型的表单输入控件。以下是我的代码开头的示例,稍后将构建一个文本输入控件:
<?php
class TextInput {
//These properties are reqiured, and are defined on an as-needed basis
public $name;
//These properties are optional, but can be defined on an as-needed basis
public $disabled = false;
public $maxLength = false;
public $readOnly = false;
public $size = false;
public $type = "text";
//New to HTML5
public $autoComplete = "off";
public $autoFocus = false;
public $listSuggestionArray = false;
public $max = false;
public $min = false;
public $multiple = false; //Works for "email" type only
public $pattern = false;
public $placeHolder = false;
public $required = false;
public function __construct() {
//Nothing to do!
}
//Build the text input control
public function build() {
}
}
?>
正如你所看到的,这个类已经相当大了,尽管它什么都不做!我的主要问题是,考虑到生成这些类显然会给服务器带来更多负载,我是否应该继续构建这些类来处理文本区域、文件输入等?
据我所知,以下是利弊:
优点:
- 很容易在以后实例化,而不是每次都手动用HTML编写
- 当数据库中的默认值可用时,提供它们将是一个快照。例如,此类可以在更新特定表单时进行侦听,并通过一个额外的实例变量从数据库中提供以前输入的值
- 每当此输入控件在非HTML5投诉浏览器上运行时,为HTML5输入类型(如"颜色")提供回退
- 其他表单输入类型可能会根据其选项进行更改。例如,文本区域的附加实例变量可以告诉客户端JavaScript将其转换为所见即所得编辑器
Con:
- 在服务器上为这些元素创建HTML需要更多的负载,尤其是在单个页面上使用了许多元素的情况下
考虑到这些,我应该使用这个路由,还是恢复到用HTML手动写出它们?
谢谢你抽出时间。
如果您还想将输入对象与其他对象绑定,我认为这可能是一个很好的方法。比如,验证/消息响应,验证对象将数据传递给输入助手。这应该允许以一种"简单"的方式在表单中提供一些用户功能。
如果不想在某个时候将其他一些功能合并到这个类中,并且只想输出一些HTML,并且担心性能,那么应该直接输入。
建议
按照你目前的策略,你会一次又一次地复制很多东西。当你想创建一个password
输入或textarea
时,你最终会复制很多相同的变量!
作为一种替代方案,您可以创建一个类,表单生成器对象可以从该类进行扩展,为适当类型的HTML元素提供一些通用功能/属性。很明显,如果不知道你要做什么以及如何做,我甚至无法开始告诉你如何将其纳入你自己的战略。