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

我不明白为什么我的开关盒不起作用。


这是我的简单代码:


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

        }

    }

它总是从德语常量返回工具提示。当我仅在第一种情况下添加回声时,它会触发多次。


不负相思意
浏览 200回答 4
4回答

杨__羊羊

首先,("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 '';    }}

qq_花开花谢_0

在php中我们使用或这样的情况           case "de":           case "DE":                return self::VELOCCI_DE['tooltip'];                break;           case "en":           case "EN":                return self::VELOCCI_EN['tooltip'];                break;

白衣染霜花

我将使用参数设置此方法,如下所示,并更改名称$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

米琪卡哇伊

请注意,开关/外壳进行松散比较(来自手册)。var_dump('en' == ('de' || 'DE'));结果bool(true)。所以你的第一个案例总是令人满意的。(对于除 '0' 或空字符串之外的任何字符串输入都相同。)某种映射在这里可能更容易:<?phpclass Texts{&nbsp; &nbsp; const VELOCCI_DE = ['tooltip' => 'Actung'];&nbsp; &nbsp; const VELOCCI_EN = ['tooltip' => 'Attention'];&nbsp; &nbsp; public static function getToolTip($code)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $code = strtolower($code);&nbsp; &nbsp; &nbsp; &nbsp; return [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'de' => self::VELOCCI_DE['tooltip'],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'en' => self::VELOCCI_EN['tooltip'],&nbsp; &nbsp; &nbsp; &nbsp; ][$code] ?? '';&nbsp; &nbsp; }}echo Texts::getToolTip('en');输出:Attention然而,这可能会很快变得笨拙。如果您有多个键和翻译要处理怎么办?
打开App,查看更多内容
随时随地看视频慕课网APP