繁体   English   中英

使用 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 = isset($input['username']) ? (string) $input['username'] : null;

我想你可以将空合并字符串类型转换的“假”值转换回空。

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

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

对于我的项目,我使用以下行之一:

$array = [
    'key_a' => 1000
];

$boolA = (bool)($array['key_a'] ?? false);
$boolB = (bool)($array['key_b'] ?? false);
var_dump($boolA);
var_dump($boolB);

$intA = (int)($array['key_a'] ?? 0);
$intB = (int)($array['key_b'] ?? 0);
var_dump($intA);
var_dump($intB);

$stringA = (string)($array['key_a'] ?? '');
$stringB = (string)($array['key_b'] ?? '');
$stringC = (string)($array['key_a'] ?? '') ?: null;
$stringD = (string)($array['key_b'] ?? '') ?: null;
$stringE = (isset($array['key_b']) ? (string)$array['key_b'] : null);
var_dump($stringA);
var_dump($stringB);
var_dump($stringC);
var_dump($stringD);
var_dump($stringE);

输出:

bool(true)
bool(false)

int(1000)
int(0)

string(4) "1000"
string(0) ""
string(4) "1000"
NULL
NULL

我不完全确定您要做什么,但看起来您在错误的地方进行投射。

你可以这样做:

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

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

老套:

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

您可以删除空分配:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM