我正在学习PHP.我从网站下载了一个开源项目,并查看该项目中每个模块的工作流程.我注意到一个我不熟悉的开关盒.
switch ($value) {
case 'student':
case StudentClass::getInstance()->getId();
return new StudentClass();
break;
case 'teacher':
case TeacherClass::getInstance()->getId();
return new TeacherClass();
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
上面的补丁就是我的样子.当我提供输入时:
$value = 'student';
Run Code Online (Sandbox Code Playgroud)
它返回StudentClass实例.
如果我给
$value = 'teacher';
Run Code Online (Sandbox Code Playgroud)
然后它返回TeacherClass实例.
如果有人解释这个流程,那么对我更好地理解PHP将会有所帮助
你的字符串cases没有break或没有return语句,所以它们"落到"下一个case.此外,你的breaks在这里没有任何用处.
我已经在您的代码中添加了注释来解释发生了什么.
switch ($value) {
case 'student': // keeps going with next line
case StudentClass::getInstance()->getId();
return new StudentClass(); // handles both cases above
break; // unnecessary because of the return above
case 'teacher': // keeps going with next line
case TeacherClass::getInstance()->getId();
return new TeacherClass(); // handles both cases above
break; // unnecessary because of the return above
default:
break; // pointless, but handles anything not already handled
}
Run Code Online (Sandbox Code Playgroud)
此外,PHP明确允许在a ;之后使用分号()case,但通常不被认为是好的样式.来自文档:
案例后可以使用分号而不是冒号...