分析:在autoValidation($data,$type)方法中有以下代码
if(!empty($this->error)) return false;由于默认通过D或M方法实例化时是单例,如果有一次执行create方法验证不通过,那么在对象中error就永远会有值,这就会导致不管如何修改数组,永远都不可能验证通过。引申问题:在实际应用中,如果验证不通过,一般就会返回到界面让用户进行处理。但这种单例模式很可能带来其它潜在问题。
建议解决方案:
1、在D和M方法中增加参数,提供强制创建一个新对象的机制。
2、在调用create这些方法时,把那些不是由用户创建的、非固定的属性删除掉,从数据层面让这个单例看起来就是一个新的对象。
一个制标的方法:
if($this->patchValidate) { // 重置验证错误信息
$this->error = array();
}
改为:
if($this->patchValidate) { // 重置验证错误信息
$this->error = array();
}
else {
$this->error = "";
} 最佳答案