根据其中一位用户的建议,此问题将继续this。
我正在使用如下的getIDs函数来处理id。 CheckValid()将检查id是否是一个有效的id,如果是,那么它将转到下一个updateUsers()。检查有效只检查条件,如果不检查则抛出异常。 updateUsers()只是在通过checkValid()时更新列。
问题 - 如果我从getIDs()和execute()获得4个id作为输出,例如它处理2,如果第2个id失败,则不会继续其余的2个ID。希望它继续,所以我注释掉了“在catch块中抛出$ e”。
Function execute() {
for($i=0 ; $i<count($this->getIDs()); $i++) {
try {
$this->checkValid();
$this->updateUsers();
} catch(Exception $e) {
//throw $e;
}
答案 0 :(得分:1)
您是否尝试在catch块中进行简单的继续?没有测试,但可能是这样的:
Function execute() {
for($i=0 ; $i<count($this->getIDs()); $i++) {
try {
$this->checkValid();
$this->updateUsers();
} catch(Exception $e) {
//throw $e;
continue; // if not working try a continue 2;
}
}
}
答案 1 :(得分:1)
听起来你正在使用异常作为布尔值,我建议避免这样做,因为它很快就会引起混淆,除非你真的需要异常的内容。看看这对你的用例是否有意义(我会批准,但可能不会)。
// returns true if valid, false otherwise
function checkValid(){
try {
// do your validation
return true;
} catch (Exception $e) {
// optional: save the exception in case we want to know about it
$this->last_error = $e;
return false;
}
}
function execute() {
for($i=0 ; $i<count($this->getIDs()); $i++) {
if($this->checkValid()){
$this->updateUsers();
}
// if you want to do something with an error, simply add an else clause
// and handle $this->last_error
}
}
此外,我显然不知道您的代码或您正在做什么,但循环n
次并且在没有参数的情况下调用checkValid()
和updateUsers()
似乎非常糟糕。例如,更好地循环遍历ID列表并依次检查每个ID和用户,如下所示:
foreach($this->getIDs() as $id){
if($this->checkValid($id)){
$this->updateUser($id);
} else {
// an advantage of this is now we can know exactly which ID failed,
// because we have the $id variable
}
}