Php 使用null合并运算符时如何键入cast?
假设我有这个:Php 使用null合并运算符时如何键入cast?,php,casting,php-7,null-coalescing-operator,Php,Casting,Php 7,Null Coalescing Operator,假设我有这个: $username = (string) $inputs['username'] ?? null; 如果设置了$inputs['username'],则我希望将其转换为字符串。如果未设置,则$username应为null 但是,如果此时未设置$inputs['username'],则它将是一个空字符串,而不是null 我怎样才能解决这个问题?或者这是故意的行为?我不完全确定你想做什么,但看起来你选错地方了 您可以这样做: $username = $inputs['usernam
$username = (string) $inputs['username'] ?? null;
如果设置了$inputs['username']
,则我希望将其转换为字符串。如果未设置,则$username
应为null
但是,如果此时未设置$inputs['username']
,则它将是一个空字符串,而不是null
我怎样才能解决这个问题?或者这是故意的行为?我不完全确定你想做什么,但看起来你选错地方了
您可以这样做:
$username = $inputs['username'] ?? null;
// cast $username to string
if ($username && $username = (string) $username){
// your code here
}
我想您可以将null合并字符串类型转换的“false”值转换回null
$username = (string) ($inputs['username'] ?? '') ?: null;
它看起来有点奇怪,但我认为它不需要使用isset
,就能产生你想要的东西。在这种情况下,”
不重要,因为它永远不会被使用;它可能是任何错误的东西。如果要在非null情况下返回的值与正在测试的值相同,则只能使用null coalesce运算符。但在你的情况下,你想在回来时投下它
因此需要使用常规条件运算符并显式测试值
$username = isset($input['username']) ? (string) $input['username'] : null;
老派:
<?php
$bar = null;
if(isset($foo))
$bar = (string) $foo;
我认为可能发生的情况是,您正在将null用户名强制转换为字符串。然后coalesce操作符将空字符串视为一个值。因此,将设置该值,并返回空字符串。你为什么需要字符串类型的演员阵容?是的,你说得对。我用??
来减少isset()
代码,您通常会使用?:
来处理类型需要严格执行的应用程序。谢谢,我的目标是使用??
来减少代码,但似乎不可能在其中进行类型转换。啊。。我明白了……所以你想减少行数,让你的代码看起来很优雅,是吗?:)更具可读性/优雅,是的,因为这种模式被大量使用。虽然看起来很诱人,但这种“优雅”的问题在于,有时下一个家伙不容易阅读。如果目标是节省两三行空间,那么我认为这可能不值得谢谢Barmar,我想这意味着没有办法了,也就是说,这就是它的设计方式?我希望替换所有的isset()
。它只能用于简化isset(表达式)?表达式:null
。如果它与该模式不匹配,它将不起作用。这可以被引导到:isset($foo)&&$bar=“$foo”代码>?
isset($foo) && $bar = (string) $foo;