PHP Switch语句,其中字符串用双引号封装

时间:2011-12-22 23:01:03

标签: php switch-statement

我在这里有一个问题,我正在寻找有经验的程序员来告诉我哪个是首选解决方案。

我返回的值被引号括起来。 "TOTAL""VALUE"是两个例子。这些不应与TOTALVALUE混淆 - 字符串实际上被双引号括起来。

我注意到下面的switch语句不起作用,因为它正在寻找TOTAL而不是"TOTAL"

switch ($statTypeName) {
    case "TOTAL":
        echo "<br>TOTAL";
        break;
    case "VALUE":
        echo "<br>VALUE";
        break;
}

为了实现这一目标,我不得不在案例中加上一句话 - '"TOTAL"'。 在我的文本编辑器(Notepad ++)中,很难看到双引号周围的单引号。

我知道这不是一个常见的问题,但解决这个问题的“专业”方法是什么?我这样做的方式,或者我应该从引用的字符串中提取字符串并完全取消双引号..?

谢谢!

4 个答案:

答案 0 :(得分:2)

 case "\"TOTAL\"":

逃避内部双引号。它将以相同的方式工作,并且可能对读者更加明显

答案 1 :(得分:1)

您遇到的确实很常见,您可以通过几种不同的方式来解决这个问题。您执行此操作的方式或@KyleBanks解决方案(转义双引号)没有任何问题。鉴于php提供单引号和双引号字符串定义,我更喜欢第一个。但这取决于您的偏好,或者您的开发团队。

就提取字符串引号中的子字符串而言......这首先取决于它们的用途。

答案 2 :(得分:1)

我建议在Notepad ++中使用更好的字体。我个人使用Consolas但是在这里你可以找到其他很好的选择: Recommended Fonts for Programming?

除了改变字体转义引号之外的其他选择是另一种选择:

 case "\"TOTAL\"":

您也可以尝试删除引号:

switch (substr($statTypeName, 1, -1)) {...}

但我认为这是一种更危险的方法,除非你开始使用更复杂的代码来用检查来剥离它们,在这种情况下,它显然会成为一种过度杀伤。

答案 3 :(得分:0)

除非你的给定代码不是某种StatType类的一部分并且在内部处理stat类型状态的表示,否则我的答案可能会忽略这一点,但无论如何它都是。

事实上,你在这里做错了什么,你要问的是找到解决你所遇到的基本问题的方法。相反,你应该解决这个基本问题。

基本问题是你缺少一层抽象,它将介于你表示statType的方式和你使用它的方式之间。

因此,如果您调用statType,您的程序应该不在乎:

  

“TOTAL”或“”TOTAL“'或”Total“或”total“

您需要注意的是,您的statType在程序执行的一个瞬间处于特定状态。如何实现状态的表示(带引号或数字的字符串)是实现的细节,你的switch语句不应该关心它。

如果您决定将statTypeName更改为不带引号,会发生什么情况。比你必须去依赖于引用并改变它的每一行代码。如果您以某种方式隐藏实现细节,则不需要更改多行代码。

也许有一种方法来设置statTypes的抽象? (为简洁起见,简化)

class StatType
{
    const TOTAL = 0;
    const VALUE = 1;
    // etc.
}

switch ($statType->type()) {
    case StatType::TOTAL:
        echo "<br>TOTAL";
        break;
    case StatType::VALUE:
        echo "<br>VALUE";
        break;
}