为什么switch()不支持正则表达式?

ryb*_*111 0 php regex switch-statement

我的理解switch()是它避免重复字符串.

如果是这样,为什么它不支持正则表达式,如下面的代码?或者我错过了什么意思switch()

switch($username){
  case "":
    array_push($errors, "Username cannot be blank");
    break;
  case "admin":
    array_push($errors, "Username cannot be 'admin'");
    break;
  case regex_switch('/xxx.*/'):
    array_push($errors, "Username cannot begin 'xxx'");
    break;
}
Run Code Online (Sandbox Code Playgroud)

R. *_*ell 5

switch不是一般条件语句,而是比较值.可以把它想象成扩展到一系列if语句.

例如,考虑以下(伪代码):

switch(a) {
  case x: ... break;
  case y: ... break;
  case z: ... break;
}
Run Code Online (Sandbox Code Playgroud)

随着扩展到如下:

if (a == x) {
}
elseif (a == y) {
}
elseif (a == z) {
}
Run Code Online (Sandbox Code Playgroud)

所以你的一个案例中的正则表达式最终会成为:

if (a == regex_switch(...)) {
}
Run Code Online (Sandbox Code Playgroud)

其中a是一个字符串......