我有将接收参数?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
需要string
,而preg_replace
&str_replace
需要array|string
什么是无需更改即可解决此问题的最佳方法从?string $x
到string $x
的参数?
换句话说,如何将var类型从string|null
更改为string
?
答案 0 :(得分:1)
我相信您也许可以打字输入$x
的值
示例:
function foo(?string $x) : string {
$a = (string) $x;
return $a;
}
这应该产生,
var_dump(foo("test"));
string(4) "test"
然后
var_dump(foo(null));
string(0) ""
希望这就是您想要的。
答案 1 :(得分:1)
虽然PHP可以通过强制转换将null转换为空字符串,但您实际上必须问自己为什么这个函数甚至应该首先接受null值。
如果null表示您有$x
的某个默认值,那么这似乎很合乎逻辑,如果$x
为null,则可以使用null合并将$x
设置为默认字符串值。
$x = $x ?? 'default';
但是,可以通过在签名中定义“默认”来更有效地解决上述问题:
function func(string $x = 'default')
但是根据您的代码,确实没有任何理由将null传递给此函数。我认为,这是一种代码味道,不应允许。此函数仅适用于字符串,因此不允许以null开头。然后,使用者应先处理null值,然后再使用此功能。