当前位置: 首页 > 面试题库 >

使开关使用===比较而不==比较在PHP中

范朗
2023-03-14
问题内容

无论如何,要使下面的代码仍然使用开关,b而不返回它,是a吗?谢谢!

$var = 0;
switch($var) {
    case NULL : return 'a'; break;
    default : return 'b'; break;
}

当然,如果使用if语句,您将像这样:

$var = 0;
if($var === NULL) return 'a';
else return 'b';

但是对于更复杂的示例,这变得很冗长。


问题答案:

抱歉,===根据switch()文档 ,您不能在switch语句中使用比较:

请注意,开关/外壳确实比较松散。

这意味着您必须提出解决方法。从松散的比较表 ,你可以利用的事实NULL == "0"是类型转换错误:

<?php
$var = 0;
switch((string)$var) 
{
    case "" : echo 'a'; break; // This tests for NULL or empty string   
    default : echo 'b'; break; // Everything else, including zero
}
// Output: 'b'
?>


 类似资料:
  • 日安- 我正在处理一个任务,在该任务中,我有指令来创建一个名为的方法,该方法将执行以下任务: public int compare(Object first,Object second)(请注意,您还可以定义:public int compare(Attory first,Attory second),方法是让类 为此,我创建了一个类,如下所示: AthletenameComparator

  • 谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜

  • 假设我有一个双人课 我希望对它进行排序,首先是第一个值,然后是第二个值。现在,如果我这样做 一切都很好,列表按对的第一个值排序,但如果我这样做 它因错误而失败 好吧,所以它可能无法推断参数,所以如果我这样做 它因错误而失败 为什么它适用于comparing()而不适用于comparing()。然后比较()?

  • 测试代码(只是为了遵守SSCCE,显然有更好的方法来改变您自己的不区分大小写的数据模型) 比方说,我希望我的类实现遵循API中建议的强烈建议: 强烈建议,但不是严格要求(x.compareTo(y)==0) == ( x.equals(y))。 那么在中使用可以吗?当然,我们正在确保不会调用作为回报。 类似:什么时候包括什么?

  • 是否有一种惯用的方法来比较两个NumPy数组,它们将NaN视为彼此相等(但不等于NaN以外的任何东西)。 例如,我希望以下两个数组比较相等: 和以下两个数组进行比较: 我正在寻找一种可以产生标量布尔结果的方法。 以下方法可以做到这一点: 但它很笨重,并且创建了所有这些中间数组。 有没有一种方法可以更容易地观察眼睛,更好地利用记忆? 另外,如果有帮助的话,已知数组具有相同的形状和数据类型。

  • 我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和