Я не знаю, что не так. PHP просто предположим, что index (int) 0 моего массива эквивалентно первому регистру Switch, и сгенерируем ошибку.
Предполагая, что я ввожу такой массив:
$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
Но это похоже на ошибку. Я проверил в PHP 7.1, 7.3 и 7.4 на Windows хосте.