向前思考肯定有更好的方法可以解决这个问题。首先,您可以尝试使用预定义的验证方法创建类似验证类的东西。
举一个(一个非常粗略的)例子:
class Validator {
public function validate($args) {
$errors = array();
//Make sure to do any santising you need too
foreach($args as $field=>$data) {
if ($response = $field($data))
$errors[$field] = $response;
//You could create break code here if you wanted
//to check if the form was invalid without detailed feedback
}
if (empty($errors)) {
return false;
}
return $errors;
}
private function email_field($data) {
$valid = true;
//perform a validation on email here, generate an $err_msg if it's not valid
if ($valid)
return false;
return $err_msg
}
}
$validator = new Validator();
//You probably want to explode or loop through the error messages
//Or for extra brownie points, use the key of each element in the array to place
//the error message intelligently within your HTML!
$validation_errs = $validator->validate($_POST);
if ($validation_errs)
print_r($validation_errs);
结合你的表格...
<form method="post" action="">
<input type="text" name="email_field" />
</form>
然后可以将其组合起来以提供您的验证。这可能更好的原因是您可以在整个站点中使用此类,这意味着您不必复制验证逻辑,更重要的是,您不必为每个表单都有嵌套逻辑的踪迹。您只需传递 post 变量,您的类将自动运行它需要的验证,并返回一个完全清除(不直观,这里是“假”,抱歉)或与它们来的字段名称配对的验证错误消息数组从。
此外,这在处理结合服务器端和客户端验证时变得很有用,允许您使用 AJAX 通过 AJAX 调用非常具体的、单个字段的验证查询到您的 PHP 并返回可以使用的响应(只要您在做您的输出足以确保它对 AJAX 通信有效)。
所以,当谈到效率时,不仅仅是现在什么是重要的,或者性能差异可能有多么微不足道......它是关于它会在以后为你节省多少时间,当你的表单发生变化时,当你的验证逻辑必须被更改,并且当您需要一遍又一遍地重用相同的验证逻辑时。