当使用 return时,我想知道是否需要在 switch函数中使用 break。
return
switch
break
function test($string) { switch($string) { case 'test1': return 'Test 1: ' . $string; case 'test2': return 'Test 2: ' . $string; } }
我试过了,没有 break也能正常工作,但这安全吗?
不需要中断,返回将停止函数的执行。
(供参考: http://php.net/manual/en/function.return.php表示:
如果从函数内部调用,return ()语句会立即结束当前函数的执行
)
不,在 switch case语句中不需要 break。 break实际上是可选的,但是要小心使用。
switch case
是的,你可以用 return代替 break..。
break是可选的,用于防止所有其他 case语句中出现“ 坠落”。因此,可以以类似的方式使用 return,就像 return结束函数执行一样。
case
另外,如果你的 case报表都是这样的:
case 'foo': $result = find_result(...); break;
在 switch语句之后,您只有 return $result,在每个 case中使用 return find_result(...);将使您的代码更具可读性。
return $result
return find_result(...);
最后,不要忘记添加 default案例。如果你认为你的代码将永远不会达到 default的情况下,那么你可以使用 assert函数,因为你永远不能肯定。
default
assert
你不需要它,但是我强烈建议你在任何情况下使用它作为良好的练习。
不,这是不必要的,因为当关键字 return 被调用时,它将表明被调用的开关/大小写的特定函数已经结束。
Break 只是一个警告语句,用来限制对 switch 结构的控制,使其不能进入另一种情况... ... 例如,如果你有三个 case 语句,值是第一种情况,并且你使用的 case 没有任何 Break 结构,那么下面的所有情况都将被执行,尽管条件只对第一种情况满足... ..。 Return 可以执行同样的功能,所以如果你用 Return 代替 break 就不会有问题,因为 Return 会从 switch case 语句中夺走控制权,而这正是当时所需要的... ..。 希望能有所帮助。
return将控制权交还给调用方法,而 break跳转到开关块之后的第一条指令。
从 PHP8(2020年11月)开始,可以使用 match:
<?php function test($string) { return match ($string) { 'test1' => 'Test 1: ', 'test2' => 'Test 2: ' } . $string; }
尽管在这种情况下,您可以只使用一个数组:
<?php function test($string) { return [ 'test1' => 'Test 1: ', 'test2' => 'Test 2: ' ][$string] . $string; }
Https://php.net/control-structures.match
没有。Return 直接跳回到函数调用返回它之后的值,并忽略执行的 return 语句之后的所有内容(在函数中)。因此 return 本身可以作为函数的 break 语句,不需要进一步的 break。这是我的例子。
switch (ActiveSt) { case 0: obj.Authuser(Session["UserId"].ToString()); obj.auditlog(UserID, MachineName, IpAdd, OsUser, Des, SysType, Screen, Fncname); Session["UserId"] = null; Response.Write("<script>alert('User authorized successfully');window.location ='frmUserPendingList.aspx';</script>"); return; case 7: obj.Authuser(Session["UserId"].ToString()); obj.auditlog(IssueId, MachineName, IpAdd, OsUser, Des, SysType, Screen, Fncname); Session["UserId"] = null; Response.Write("<script>alert('User authorized successfully');window.location ='frmUserPendingList.aspx';</script>"); return; case 1: Response.Write("<script>alert('User already authorized!');</script>"); errorHandle("User Already Authorized!"); return; case 5: Response.Write("<script>alert('User already rejected!');</script>"); errorHandle("User already rejected!"); return; }