我有一个Input辅助类,如果源数组索引未定义,则抛出异常。
所以,如果我有类似的东西:
$input = new Input($_GET, $_POST);
$input->get("var1");
$input->get("var2");
$input->get("var3");
$input->get("var4");
现在是:
$input = new Input($_GET, $_POST);
try {
$input->get("var1");
} catch(Exception $e) {
//handle it
}
try {
$input->get("var2");
} catch(Exception $e) {
//handle it
}
try {
$input->get("var3");
} catch(Exception $e) {
//handle it
}
try {
$input->get("var4");
} catch(Exception $e) {
//handle it
}
如果我要将所有内容放入1 try catch块中,我不知道如何使用更少的try catch块而不必停止执行更多代码。
这是使用try catch函数的正确方法吗?
答案 0 :(得分:3)
为什么不这样:
try {
$input->get("var1");
$input->get("var2");
$input->get("var3");
$input->get("var4");
} catch(Exception $e) {
//handle it
}
答案 1 :(得分:1)
你真的需要单独处理每个例外吗?例如将
try {
$input->get('var1');
$input->get('var2');
$input->get('var3');
$input->get('var4');
} catch (Exception $e) {
... do something
}
同样工作?使用此构造,任何失败的get()调用都将触发catch,并且不会执行进一步的get()调用。例如,如果var2
抛出,则永远不会得到var3和var4。
答案 2 :(得分:0)
我没有添加这么多尝试捕获。 开发和维护是一件痛苦的事。 如果你能把它推回一种方法,你会感谢自己。
我建议的更好:
if(isset($input->get("var4")))
$input->get("var4")
或
function get($name){
if(isset($this->get($name)))
return $this->get($name);
return false; //or throw an exception/error here :)
}
答案 3 :(得分:0)
这取决于你想要达到的目标。如果你想在任何getter失败后中断代码执行,你应该使用HeroFTime解决方案。如果你想分别处理每个getter,最好编写一个封装try / catch的函数,如下所示:
function getter($input, $value) {
try {
return $input->get($value);
} catch(Exception $e) {
return null; // or any default value you'd like to provide
}
}