使用 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;
假设我有这个:
$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;