![](/img/trans.png)
[英]Can I wrap an input field with some additional functions when using null coalescing operator in PHP 7?
[英]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.