如何在使用空合并运算符时键入强制转换?

时间:2018-05-14 20:26:56

标签: php casting php-7 null-coalescing-operator

说我有这个:

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

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

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

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

4 个答案:

答案 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;