这是我使用的代码:
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'
]);
})
任何解决方案?
答案 0 :(得分:0)
从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
});
答案 1 :(得分:0)
您可以通过将匿名函数作为参数传递然后在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”。