如何键入迭代混合数组的循环

How to type loop that iterates over an array of mixed

鉴于此代码 (https://psalm.dev/r/156e52eb66):

<?php

function keys(): array
{
  return ['foo', 'bar'];
}

// no lines above can be changed

foreach (keys() as $k) {
  echo gettype($k);
}

假设 keys 函数不受我们控制(在不同的项目中)并且它有效地 returns 一个 mixed 数组(array<array-key, mixed>).

因此,只能更改循环及其周围。

有可能吗?

UPD:我报告了https://github.com/vimeo/psalm/issues/2025

如果我做对了,这可能会对你有所帮助:

foreach (array_keys(keys()) as $k) {
 echo gettype(keys()[$k])."\n";
}

您可以使用 for 循环而不是 foreach 循环来修复警告。

$keys = keys();
for( $i = 0; $i < count( $keys); $i++ ) {
  echo gettype( $keys[$i] );
}

这是诗篇中的linkhttps://psalm.dev/r/20c1cbab73

这是 psalm 的错误。

参考Github: INFO: MixedAssignment - Cannot assign to a mixed type | when using string array key #1281,

并且已被 muglug in this commit 6033345694727d7c3cf84adc76507c3785ed0295

修复