我不知道怎么了。 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在switch部分中使用==运算符。当您尝试将int(0)与字符串“ testA”进行比较时,它总是返回true。检查一下:
if(0 == "some string") echo "Equals!";
此代码打印“等于!”。