gpt4 book ai didi

php - 请求->get() 提供的 Psalm 可能为空值

转载 作者:行者123 更新时间:2023-12-04 03:47:05 24 4
gpt4 key购买 nike

我有以下代码:

$request->headers->get('Accept-Language', 'en');

我提供了一个默认值,但 Psalm 认为它可能为 null,因为 ->get() 声明返回一个可为 null 的字符串:

// vendor/symfony/http-foundation/HeaderBag.php
/**
* Returns a header value by name.
*
* @return string|null The first header value or default value
*/
public function get(string $key, string $default = null) { /* */ }

我怎样才能解决这个问题,让 psalm 知道它不为空?

最佳答案

由于您无法控制上游库中的注释,因此您必须在自己的代码中向 Psalm 提供缺失的信息。

有几种方法可以解决这个问题:

转换为字符串,因此 Psalm 毫不怀疑 get() 为您提供什么类型:

$a = (string) $request->headers->get('Accept-Language', 'en');

是的,转换是多余的,但它清晰简洁。我通常这样做只是为了经济。

您可以显式声明此 get() 调用产生的变量是一个字符串:

/** @var string $acceptLanguage **/
$acceptLanguage = $request->headers->get('Accept-Language', 'en');

最后,您可以在任何需要的地方简单地抑制 PossiblyNullArgument:

/** @psalm-suppress PossiblyNullArgument */
iWantAString($request->headers->get('Accept-Language', 'en'));

查看所有这些工作 here .

您还可以将上面的一些方法与您自己的包装器方法结合起来,以处理从请求中获取值的问题,确保始终返回字符串。如果这样做,如果找不到参数,您可能应该抛出异常。

关于php - 请求->get() 提供的 Psalm 可能为空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64965293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com