说我有这个:
$username = (string) $inputs['username'] ?? null;
如果设置了$inputs['username']
,那么我希望它转换为string
。如果设置不,则$username
应为null
。
但是,如果未设置$inputs['username']
,则它将是一个空字符串而不是null。
我该如何解决这个问题?或者这是故意的行为吗?
答案 0 :(得分:0)
我不完全确定你要做什么,但看起来你在错误的地方投射。
您可以这样做:
$username = $inputs['username'] ?? null;
// cast $username to string
if ($username && $username = (string) $username){
// your code here
}
答案 1 :(得分:0)
我想你可以将null-coalesced string typecast的“falsey”值转换回null。
$username = (string) ($inputs['username'] ?? '') ?: null;
看起来很奇怪,但我认为如果不使用isset
,它会产生你想要的东西。在这种情况下,''
并不重要,因为它永远不会被使用;它可能是任何虚假的东西。
答案 2 :(得分:0)
如果要在非空情况下返回的值与您要测试的值相同,则只能使用null-coalesce运算符。但在你的情况下,你想在返回时施放它。
因此需要使用常规条件运算符并显式测试该值。
$username = isset($input['username']) ? (string) $input['username'] : null;
答案 3 :(得分:0)
旧学校:
<?php
$bar = null;
if(isset($foo))
$bar = (string) $foo;
您可以删除空作业:
isset($foo) && $bar = (string) $foo;