使用 null 合并运算符时如何键入 cast?

How can I type cast when using the null coalescing operator?

假设我有这个:

$username = (string) $inputs['username'] ?? null;

如果设置了 $inputs['username'],那么我希望它转换为 string。如果 未设置 ,则 $username 应为 null

但是,目前如果未设置 $inputs['username'],它将是一个空字符串而不是 null。

我该如何解决这个问题?或者这是故意的行为?

我不完全确定你想做什么,但看起来你投错了地方。

你可以这样做:

$username = $inputs['username'] ?? null;

// cast $username to string 
if ($username && $username = (string) $username){
   // your code here
}

我想你可以将 null 合并字符串类型转换的 "falsey" 值转换回 null。

$username = (string) ($inputs['username'] ?? '') ?: null;

它看起来有点奇怪,但我认为它可以在不使用 isset 的情况下产生你想要的东西。在这种情况下,'' 无关紧要,因为它永远不会被使用;可能是假的。

如果您想要 return 在非空情况下的值与您正在测试的值相同,则只能使用空值合并运算符。但在你的情况下,你想在 returning.

时投射它

因此需要使用常规条件运算符并显式测试值。

$username = isset($input['username']) ? (string) $input['username'] : null;

老派:

<?php
$bar = null;
if(isset($foo))
    $bar = (string) $foo;

您可以删除空分配:

isset($foo) && $bar = (string) $foo;