【问题标题】:How to create reusable for loop with try catch?如何使用 try catch 创建可重用的 for 循环?
【发布时间】:2023-03-27 02:03:01
【问题描述】:

这是我正在使用的代码:

for ($i=0; $i < 2; $i++) {
    try {
        User::create([
            'name' => 'username'
        ]);
        break;
    } catch (\Illuminate\Database\QueryException $e) {
        if ($i == 1) {
            throw $e;
        }
    }
}

但我想使此代码可重用,例如仅替换 try 循环中的数据:

for ($i=0; $i < 2; $i++) {
    try {

        // replace something here
        // all rest of the code should be ignore and resuable

        break;
    } catch (\Illuminate\Database\QueryException $e) {
        if ($i == 1) {
            throw $e;
        }
    }
}

可能是这样的用例:

loop(function() {
    User::create([
        'name' => 'user name'
    ]);
})

有什么办法吗?

【问题讨论】:

    标签: php for-loop


    【解决方案1】:

    从 PHP 5.3.0 开始,您可以将函数作为函数的参数传递。因此,您可以将 for 循环放入某个函数中,并在调用它时传递其他函数(您想要更改的代码段)。

    例如(未测试):

    function loopingFucntion($someOtherFunction){
        for ($i=0; $i < 2; $i++) {
            try {
        $someOtherFunction();
                break;
            } catch (\Illuminate\Database\QueryException $e) {
                if ($i == 1) {
                    throw $e;
                }
            }
        }
    }
    
    //and when you wanna pass your new code you can call it like this
    loopingFucntion(function(){
        //your new code
    });
    

    【讨论】:

      【解决方案2】:

      通过将匿名函数作为参数传入,然后在 for 循环中运行它,您几乎可以完全按照您所说的进行操作。上面的代码只会进入一个函数

      function loop($func)
      {
          for ($i=0; $i < 2; $i++)
          {
              try
              {
                  $func();
              }
              catch (\Illuminate\Database\QueryException $e)
              {
                  if ($i == 1)
                      throw $e;
              }
          }
      }
      
      loop(function()
      {
          echo "LOOPING" . "\n";
      });
      

      这会输出“LOOPING”两次。

      【讨论】:

        猜你喜欢
        • 2016-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 2018-01-16
        相关资源
        最近更新 更多