PHP开关在字符串中输入整数索引时的大小写

问题描述 投票:0回答:1

我不知道怎么了。 PHP仅假设我数组的索引(int)0等于Switch的第一个Case,并抛出错误。

假设我输入这样的数组:

$config = [
    "testA" => true,
    "testB" => 22,
    0 => 0
];

我的代码示例:

foreach($config as $name => $value) {
    switch($name) {
        case "testA":
            if (!is_bool($value)) throw new \Exception( "Configuration '$name' must be boolean.");
            $this->systemVarA = $value;
            break;
        case "testB":
            if (!is_int($value)) throw new \Exception( "Configuration '$name' must be integer.");
            $this->systemVarB = $value;
            break;
    }
}

当然$ config [“ testA”]和$ config [“ testB]正常工作,但是当foreach达到$ config [0]时,触发了“ testA”,应用程序抛出异常。

我得到的解决方法是在Switch之前,像这样强制转换变量$ name:

$name = (is_int($name) ? (string)$name : $name); // Used this because I already have other inline if

但是它似乎是一个错误。我已经在Windows主机上的PHP 7.1、7.3和7.4中进行了测试。

php exception integer switch-statement case
1个回答
0
投票

那是因为PHP在switch部分中使用==运算符。当您尝试将int(0)与字符串“ testA”进行比较时,它总是返回true。检查一下:

if(0 == "some string") echo "Equals!";

此代码打印“等于!”。

© www.soinside.com 2019 - 2024. All rights reserved.