前些天用Struts写个小东西玩玩,发现在struts中表单对action form是自动进行赋值的。也就是说,只要JAVA BEAN里面的属性名与页面表单中对应的input名是严格对应的就可以自动赋值。感觉很有意思,PHP是自己最喜欢的WEB编程语言,就想试着在PHP中也实现这个功能,没想到查了一下PHP的手册中关于反射的部分,发现真是太Easy了。在项目中应用了一下感觉太爽了。不仅实现了自动赋值,可以说还实现了自动取值,至少方便了特别多。
只要在调用的时候
$foo=new foo();
$foo->setValues();//就完成了自动赋值的过程。原来要写多个个XX=$_POST["XX"]啊
如果要取实体类的值也十分方便
$foo=new foo();
$foo->setValues();//取得需要进行查询必须的部分属性值其实只要取一个KEY就成了。
$foo->getDetail();//OK,所有的属性值就都被数据表中的对应数据填充了。
跟大家分享一下。
以往如果对一个数据表进行封装,一般会写一个对应的类文件,用来读写数据。就象下面这个这样。
/**
* 此apply数据表封装是由《数据表封装类自动生成工具1.0》生成.
** 目前此工具任处于完善过程中,有意见或建议请 mail:jy@http://www.doczj.com/doc/df867f2acfc789eb172dc882.html
**/
require_once("dbc.php");//数据库连接文件,我用的是ADO
class tips {
public $TSBH;//提示编号
public $TSLB;//提示类别
public $TSNR;//提示内容
public $PF;//评分
/**
* 对实例各属性进行赋值
*
*/
public function setValues(){
//如果实体类对应的数据表有30个字段,这部分将会超级长
$this->TSBH=$_POST["TSBH"];
$this->TSLB=$_POST["TSLB"];
$this->TSNR=$_POST["TSNR"];
$this->PF=$_POST["PF"];
}
/**
* 保存数据
*一般在调用前需要调用getValues()从WEB表单中获取数据自动为各属性进行赋值
*@return 更新或写入的数据条数
**/
public function save(){
global $MyDB;
$sql="select TSBH from cvts_tips where TSBH='$this->TSBH'";
$MyDB->query($sql);
if($MyDB->Affected_Rows()>=1){
$sql="update cvts_tips set TSBH='$this->TSBH',TSLB='$this->TSLB',TSNR='$this->TSNR',PF='$this->PF' where TSBH='$this->TSBH'";
}else{
$sql="insert into cvts_tips (TSBH,TSLB,TSNR,PF) values('$this->TSBH','$this->TSLB','$this->TSNR','$this->PF')";
}
$MyDB->query($sql);
return $MyDB->Affected_Rows();
}
public function delValue(){
global $MyDB;
$sql="delete from cvts_tips where TSBH='$this->TSBH'";
$MyDB->query($sql);
return $MyDB->Affected_Rows();
}
/**