为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在继续之后;执行进一步的功能代码被执行?

为什么在继续之后;执行进一步的功能代码被执行?

PHP
尚方宝剑之说 2021-07-06 17:11:02
我有一个功能,如:public function checkItems(int $id, array $items){    $this->validateItems($id, $items);    foreach($items as $item) {        ...// further code    }    return $items;}private function validateItems(int $id, array $items){    foreach ($items as $item) {        if (!is_int($item->itemId)) {            continue;        }    }}问题是,当我写这个时,如果:if (!is_int($item->itemId)) {    continue;}在函数 checkItems() 内部(没有移动到另一个)它工作得很好,因为 ..//如果项目错误,则不会执行进一步的代码。如果信息无效,它基本上返回 $items 。但是当我将验证移到另一个函数中时,尽管有 continue 语句,但最后它会再次循环并执行进一步的代码。有人能告诉我如何通过验证转移到另一个功能来正确解决这个问题吗?
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

continue 只在它被使用的循环中工作 - 的 foreach ($items as $item)


如果你想在验证函数中使用它,你要么需要传回某种有效选项数组 - 或者在 for 循环中使用验证 ...// further code


就像是:


public function checkItems(int $id, array $items)

{

    foreach($items as $item) {

        if ($this->validateItems($id, $item) {

            ...// further code

        }

    }


    return $items;

}


private function validateItems(int $id, array $item)

{

    //$id is never used?

    if (!is_int($item->itemId)) {

        return false;

    }

    return true;

}


查看完整回答
反对 回复 2021-07-09
?
跃然一笑

TA贡献1826条经验 获得超6个赞

循环内的 continue 命令跳过该循环内它下面的任何代码,并从顶部开始循环。


因此,将它放在任何循环的末尾都没有区别,因为没有其他代码可以跳过。和循环从顶部开始,就好像没有继续命令一样。


如果您以这种方式进行验证,则它需要继续,则此继续将始终指代它所在的循环。因此,如果您将其移动到其他函数,它会跳过该函数内部循环下方的代码的执行,但这不会影响任何其他循环,尤其是在其他函数中。


因此,如果您在 checkItems() 内的 foreach 内使用 continue ,它将跳过该函数的 foreach 内的命令。


但是,如果您将 continue 移至函数 validateItems() 并从 checkItems() 内部调用该函数,则在 checkItems() 内部将不会影响使用 validateItems() 内部的 continue


到第二部分如何进行验证。


你的验证器应该返回一个真/假,并在 checkItems() 中测试它,如果它是假的,那么你使用 continue


<?php


public function checkItems(int $id, array $items)

{

    $this->validateItems($id, $items);


    foreach($items as $item) {


        if(false === $this->validateItems($id, $items)) {

            continue;

        }


        ...// further code

    }


    return $items;

}


private function validateItems(int $id, array $items)

{

    foreach ($items as $item) {

        if (!is_int($item->itemId)) {

            return false;

        }

    }

    return true;

}


查看完整回答
反对 回复 2021-07-09
  • 2 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信