我有一个班级Person
。
我想在我的脚本中添加错误处理,因此,用户输入脚本会告诉他们的错误电子邮件地址。通常不是问题,但现在我正在使用OO课程,我在不熟悉的领域。
因此。我想我想知道如何处理多个异常。或者我是否需要一次尝试每个代码行并捕获每一行?这似乎有点过分。理想情况下,我想做以下事情:
try {
$people[$new]->set_fullname($_POST['name']);
$people[$new]->set_active(true);
$people[$new]->set_add1(rEsc($_POST['add1']));
$people[$new]->set_add2(rEsc($_POST['add2']));
$people[$new]->set_add3(rEsc($_POST['add3']));
$people[$new]->set_add4(rEsc($_POST['add4']));
$people[$new]->set_postcode(rEsc($_POST['postcode']));
$people[$new]->set_phone(rEsc($_POST['phone']));
$people[$new]->set_email(rEsc($_POST['email']));
} catch {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
但是在我的错误处理中,如何捕获多个错误?我想将所有错误消息推送到一个数组中,并在网页中很好地显示它们。据我所知,在php.net上,似乎我一次只能收到一条错误消息。
我真的必须try {} catch {}
每行代码吗?
答案 0 :(得分:4)
$errors
数组中。
搞砸场地的用户不是特例。我甚至认为用户对象应该无法验证电子邮件地址。这似乎是表格的责任。
我也想知道您正在使用的rEsc
功能是什么。你不仅使用了一个global
函数,这使得以后几乎不可能将它换成其他函数(紧耦合),而且名称选择得很糟糕。我也不明白为什么你想逃离那个地方的东西(我猜这就是事情所做的)。仅在使用时转义/清理数据。我想知道你是在逃避数据,因为如果是数据库输入,那就有更好的方法。
答案 1 :(得分:0)
try {
$people[$new]->set_fullname($_POST['name']);
$people[$new]->set_active(true);
$people[$new]->set_add1(rEsc($_POST['add1']));
$people[$new]->set_add2(rEsc($_POST['add2']));
$people[$new]->set_add3(rEsc($_POST['add3']));
$people[$new]->set_add4(rEsc($_POST['add4']));
$people[$new]->set_postcode(rEsc($_POST['postcode']));
$people[$new]->set_phone(rEsc($_POST['phone']));
$people[$new]->set_email(rEsc($_POST['email']));
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} catch (EmailFormatException $em) {
echo 'Caught exception: '. $e->getMessage();
}
就这样继续下去
答案 2 :(得分:0)
以下是我的设计方法:
把这一切放在一起:
class Person {
public $name;
public $address1;
public $address2;
public function validate() { }
}
然后你的代码:
$obj = new Person();
$obj->name = "Bob";
$obj->address1 = "1 Elm St.";
$validationResult = $obj->validate();
if ( $validationResult != null) { // there were errors
print_r($validationResult);
}
答案 3 :(得分:-3)
您可以创建一个foreach语句,在循环中设置需要使用try / catch进行验证的数据,以便使用错误填充数组:
$errors = [];
foreach (['field1', 'field2', ...] as $field) {
try {
$method = "set_{$field}";
$people[$new]->$method(rEsc($_POST[$field]));
} catch (Exception $e) {
$errors[] = $e->getMessage();
}
}