4 回答
TA贡献1943条经验 获得超7个赞
首先,("en" || "EN")在 case 语句评估为布尔值,在你的情况下 PHP 的 switch case 不能像这样工作case ('dn' || 'DN'):
其次,在您的代码中,在break之后有一个不可访问的return,换句话说,您不需要在break之后放置,return因此正确的代码将是这样的
public static function getToolTip(){
$stringCode = "en";
switch ($stringCode){
case 'de':
case 'DE':
return self::VELOCCI_DE['tooltip'];
case 'en':
case 'EN':
return self::VELOCCI_EN['tooltip'];
case 'fr':
case 'FR':
return self::VELOCCI_FR['tooltip'];
case 'es':
case 'ES':
return self::VELOCCI_ES['tooltip'];
case 'in':
case 'IN':
return self::VELOCCI_IN['tooltip'];
default:
return '';
}
}
TA贡献1835条经验 获得超7个赞
在php中我们使用或这样的情况
case "de":
case "DE":
return self::VELOCCI_DE['tooltip'];
break;
case "en":
case "EN":
return self::VELOCCI_EN['tooltip'];
break;
TA贡献1796条经验 获得超10个赞
我将使用参数设置此方法,如下所示,并更改名称$stringCode:
public static function getToolTip(string $languageCode = 'EN'){
}
在哪里$languageCode替换$stringCode = "en";您的原始方法。
如果您不想要默认参数,可以将其设置为null; 也为了减少案例的数量,您可以case以一致的方式测试每个案例,例如:
public static function getToolTip(string $languageCode = NULL){
$languageCode = strtoupper($languageCode);
## Rest of your code from here
}
所以测试使用strtoupper看起来像:
public static function getToolTip(string $languageCode = 'EN'){
switch (strtoupper($languageCode)){
case 'DE':
return self::VELOCCI_DE['tooltip'];
case 'EN':
return self::VELOCCI_EN['tooltip'];
case 'FR':
return self::VELOCCI_FR['tooltip'];
case 'ES':
return self::VELOCCI_ES['tooltip'];
case 'IN':
return self::VELOCCI_IN['tooltip'];
default:
return '';
}
}
TA贡献1998条经验 获得超6个赞
请注意,开关/外壳进行松散比较(来自手册)。
var_dump('en' == ('de' || 'DE'));结果bool(true)。
所以你的第一个案例总是令人满意的。(对于除 '0' 或空字符串之外的任何字符串输入都相同。)
某种映射在这里可能更容易:
<?php
class Texts
{
const VELOCCI_DE = ['tooltip' => 'Actung'];
const VELOCCI_EN = ['tooltip' => 'Attention'];
public static function getToolTip($code)
{
$code = strtolower($code);
return [
'de' => self::VELOCCI_DE['tooltip'],
'en' => self::VELOCCI_EN['tooltip'],
][$code] ?? '';
}
}
echo Texts::getToolTip('en');
输出:
Attention
然而,这可能会很快变得笨拙。如果您有多个键和翻译要处理怎么办?
- 4 回答
- 0 关注
- 199 浏览
添加回答
举报