我在这里有一个问题,我正在寻找有经验的程序员来告诉我哪个是首选解决方案。
我返回的值被引号括起来。 "TOTAL"
和"VALUE"
是两个例子。这些不应与TOTAL
和VALUE
混淆 - 字符串实际上被双引号括起来。
我注意到下面的switch语句不起作用,因为它正在寻找TOTAL
而不是"TOTAL"
:
switch ($statTypeName) {
case "TOTAL":
echo "<br>TOTAL";
break;
case "VALUE":
echo "<br>VALUE";
break;
}
为了实现这一目标,我不得不在案例中加上一句话 - '"TOTAL"'
。
在我的文本编辑器(Notepad ++)中,很难看到双引号周围的单引号。
我知道这不是一个常见的问题,但解决这个问题的“专业”方法是什么?我这样做的方式,或者我应该从引用的字符串中提取字符串并完全取消双引号..?
谢谢!
答案 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;
}