我正在使用一个Form
类以静态方式获取表单的值。一切都很棒。但我想动态地做到这一点。我想要一个表单类,它可以为不同的表单完成工作。在display()方法中,我正在获取名称,电子邮件,密码,电话等的值。我希望当有或多或少的价值或以另一种形式时,Form 类会动态地为我完成工作。我该怎么做?
//This is Register.php
public function display()
{
Form::setname($_POST['name']);
Form::email($_POST['email']);
Form::password($_POST['pass']);
Form::repassword($_POST['rpass']);
Form::phone($_POST['phone']);
list($name,$b,$c,$d,$e)=Form::getall();
}
<?php
//This is Form.php
class Form
{
private $name;
private $email;
private $pass;
private $rpass;
private $phone;
public static function setname($name)
{
$this->name=$name; // Using $this when not in object context
}
public static function email($email)
{
$this->email=$email;
}
public static function password($pass)
{
$this->pass=$pass;
}
public static function repassword($rpass)
{
$this->rpass=$rpass;
}
public static function phone($phone)
{
$this->phone=$phone;
}
public static function getall()
{
$a=$this->name;
$b=$this->email;
$c=$this->pass;
$d=$this->rpass;
$e=$this->phone;
return [$a,$b,$c,$d,$e];
}
}
您必须
做一些事情才能做到这一点。首先,避免静电。从概念上讲,每个表单都应该由它自己的对象表示。其次,使用 PHP 提供的神奇方法。这些非常强大,如果使用得当,可以允许一些疯狂的好设计。第三,对单个表单中的所有输入元素使用具有单个名称的数组表示法,例如,对于表单元素的名称:使用类似以下内容:User[email]
,而不仅仅是email
和User[name]
,而不仅仅是name
等等。
记住这些,表单类可以如下所示:
class Form{
private $variables = array();
public function __get($name){
$returnValue = null;
if(isset($this->variables[$name])){
$returnValue = $this->variables[$name];
}
return $returnValue;
}
public function __set($name, $value){
$this->variables[$name] = $value;
}
public function getAll(){
return $this->variables;
}
}
这对于您需要的功能来说应该足够了。此外,您可以添加一个我发现非常有用的便利功能。这可以命名为setAttrubites
或setAll
函数。它会是这样的:
public function setAll($allData){
foreach($allData as $key => $data){
$this->variables[$key] = $data;
}
}
这将允许您使用如下命令一次性设置所有变量:
$form = new Form();
$form->setAll($_POST['User']);
为了实现这一点,正如我之前提到的,所有输入元素都应该分组在一个数组中。所以输入元素是这样的:
<input type="text" name="User[name]" />
<input type="text" name="User[email]" />
希望你得到漂移...
您可以尝试向类中添加一个新变量数组,就像
$dynamic_form_elements = array();
public static function dynamic_element($element, $value) {
$this->dynamic_form_elements[$element] = $value;
}
之后,只需将 $dynamic_form_elements 变量放入您的列表中,即可在 getAll() 方法中返回。
return [$a,$b,$c,$d,$e,$dynamic_form_elements];
它
工作正常,我只需要一个 setvalue 和 getvalue 方法 在表单 calss .并且每次为 display() 方法中的特定字段调用它。是好还是有更好的方法?
class Form{
private $value;
public function setvalue($value)
{
$this->value=$value;
}
public function getvalue()
{
$a=$this->value;
return $a;
}
}
public function display()
{
$newform=new Form();
$newform->setvalue($_POST['name']);
$name=$newform->getvalue();
$newform->setvalue($_POST['email']);
$b=$newform->getvalue();
$newform->setvalue($_POST['pass']);
$c=$newform->getvalue();
$newform->setvalue($_POST['rpass']);
$d=$newform->getvalue();
$newform->setvalue($_POST['phone']);
$e=$newform->getvalue();
}