在PHP中有没有办法使SWITCH运算符比较严格?

5
我有这样的控制结构:
switch ($var) {
   case TRUE: 
   break;

   case FALSE:
   break;

   case NULL:
   break;
}

我的NULL情况从未被调用,因为我在php手册中发现:

请注意,switch / case进行了松散比较

我知道我可以使用IF代替SWITCH,但我不想这样做,因为我已经在每个SWITCHCASE中使用了一些IF's

是否有任何方法可以重新编写SWITCH或使用一些技巧使其比较值严格?

3个回答

7
是的,你可以做到。
switch (true) {
   case $var === TRUE: 
   break;

   case $var === FALSE:
   break;

   case $var === NULL:
   break;
}

非常好的解决方案,谢谢。但是它会让php每次都评估每个CASE吗? - Green
2
@Green 这与每个switch语句完全相同-进入第一个计算结果为true的case,并且在第一个break语句处停止执行。 - Maxim Krizhanovsky

0

2020年更新

PHP 8有一个严格版本的switch语句;match

match ($var) {
  true => ...,
  false => ...,
  null => ...,
};

使用 match 语句和 switch 语句有一些细微的区别。其中,match 是一个表达式(返回结果),而分支只支持单行表达式。


0

这就是 switch 结构的工作方式 - 你无法做太多改变。

我唯一能想到的方法是对 PHP 源代码进行一些修改并重新编译它;但是,那样的话,你将不再运行“PHP”(你的代码将依赖于其他东西而不是“PHP”)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接