为了账号安全,请及时绑定邮箱和手机立即绑定

PHP Switch case 不起作用。字符串比较

PHP Switch case 不起作用。字符串比较

PHP
不负相思意 2022-10-14 15:54:39
我不明白为什么我的开关盒不起作用。这是我的简单代码:public static function getToolTip(){        $stringCode = "en";        switch ($stringCode){            case ("de" || "DE"):                return self::VELOCCI_DE['tooltip'];                break;            case ("en" || "EN"):                return self::VELOCCI_EN['tooltip'];                break;            case ("fr" || "FR"):                return self::VELOCCI_FR['tooltip'];                break;            case ("es" || "ES"):                return self::VELOCCI_ES['tooltip'];                break;            case ("in" || "IN"):                return self::VELOCCI_IN['tooltip'];                break;            default:                return "";        }    }它总是从德语常量返回工具提示。当我仅在第一种情况下添加回声时,它会触发多次。
查看完整描述

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 '';

    }

}


查看完整回答
反对 回复 2022-10-14
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

在php中我们使用或这样的情况


           case "de":

           case "DE":

                return self::VELOCCI_DE['tooltip'];

                break;

           case "en":

           case "EN":

                return self::VELOCCI_EN['tooltip'];

                break;


查看完整回答
反对 回复 2022-10-14
?
白衣染霜花

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 '';

    }

}

来源:PHP:strtoupper


查看完整回答
反对 回复 2022-10-14
?
米琪卡哇伊

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

然而,这可能会很快变得笨拙。如果您有多个键和翻译要处理怎么办?


查看完整回答
反对 回复 2022-10-14
  • 4 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信