【问题标题】:How to type loop that iterates over an array of mixed如何键入遍历混合数组的循环
【发布时间】:2019-12-22 10:47:50
【问题描述】:

鉴于此代码 (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 函数不受我们控制(在不同的项目中)并且它有效地返回mixed (array&lt;array-key, mixed&gt;) 的数组,它会如何键入。

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

有可能吗?

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

【问题讨论】:

  • 我不确定我是否理解您想要达到的目标?你想知道数组中不同的元素是什么类型吗?
  • 库方法返回一个类型为mixed的值数组,因此每个数组值都可以是任何有效的php类型。检查提供的诗篇链接,警告是我需要修复的。

标签: php psalm-php


【解决方案1】:

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

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

【讨论】:

  • 天啊。我必须承认它是类型检查,但它不是很丑吗?谁会在生产中运行类似的东西
  • 肯定是这样)。我不会在生产中运行它,但对于这个 psalm 案例它可以工作。
  • 还要检查我是否使用错误报告的链接更新了问题,并且 psalm 开发团队同意应该改进它。
【解决方案2】:

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

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

这是诗篇中的链接https://psalm.dev/r/20c1cbab73

【讨论】:

  • @zerkms 请立即查看。
  • 是的,算作一个解决方案。不过,另一个答案的变化。 +1 不过
【解决方案3】:

【讨论】:

  • 如果半年前修复 - 它必须已经部署到 psalm.dev repl
猜你喜欢
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 2014-11-11
相关资源
最近更新 更多