如何将可空变量转换为不可空类型?

How to convert nullable variable to non nullable type?

我有接收参数的函数?string

public function func(?string $x): string
{
    $x = trim(strtolower($x));
    $x = preg_replace('/\s+/', ' ', $x);
    $x = str_replace(' ', '-', $x);
    return $x;
}

运行 ./vendor/bin/phpstan analyse 给出那些错误:

Parameter #1 $str of function strtolower expects string, string|null given.              
Parameter #3 $subject of function preg_replace expects array|string, string|null given.  
Parameter #3 $subject of function str_replace expects array|string, string|null given.   

strtolower 需要 stringpreg_replace&str_replace 需要 array|string

最好的方法是什么在不将参数从 ?string $x 更改为 string $x?
的情况下解决此问题 换句话说如何将 var 类型从 string|null 更改为 string ?

我相信您可以输入 $x

的值

示例:

function foo(?string $x) : string {
    $a = (string) $x;

    return $a;
}

这应该会产生,

var_dump(foo("test"));

string(4) "test"

而且,

var_dump(foo(null));

string(0) ""

希望这就是您要找的。

虽然 PHP 可以通过转换将 null 转换为空字符串,但您真的必须问问自己为什么这个函数首先应该接受 null 值。

如果 null 意味着 $x 有一些默认值,那么这似乎完全合乎逻辑,如果 $x 是空。

$x = $x ?? 'default';

但是,通过在签名中定义'default'可以更有效地解决上述问题:

function func(string $x = 'default')

但是根据您的代码,确实没有任何理由将 null 传递给此函数。在我看来,这是一种代码味道,不应该被允许。此函数仅适用于字符串,因此不允许以空值开头。空值应该在它到达此函数之前由消费者处理。