如何将可空变量转换为不可空类型?
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
需要 string
和 preg_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 传递给此函数。在我看来,这是一种代码味道,不应该被允许。此函数仅适用于字符串,因此不允许以空值开头。空值应该在它到达此函数之前由消费者处理。
我有接收参数的函数?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
?
我相信您可以输入 $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 传递给此函数。在我看来,这是一种代码味道,不应该被允许。此函数仅适用于字符串,因此不允许以空值开头。空值应该在它到达此函数之前由消费者处理。