Как создать многоразовый цикл с try catch? - PullRequest
0 голосов
/ 26 мая 2018

вот код, который я использую:

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

, но я хочу, чтобы этот код можно было многократно использовать только для замены данных в цикле попытки, например:

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'
    ]);
})

любое решение?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вы можете сделать в точности то, что говорите, передав анонимную функцию в качестве параметра, а затем запустив ее внутри цикла 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» дважды.

0 голосов
/ 26 мая 2018

В 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...