如果为null,则在PHP的一行中使用其他变量
PHP中是否有类似于JavaScript的东西:
alert(test || 'Hello');
因此,当test未定义或为null时,我们将看到Hello,否则-我们将看到test的值。
我在PHP中尝试了类似的语法,但是它似乎无法正常工作。
谢谢
编辑
我可能应该补充一点,我想在数组中使用它:
$arr = array($one || 'one?', $two || 'two?'); //This is wrong
但是确实,我可以使用内联'? :'如果在这里也声明,谢谢。
$arr = array(is_null($one) ? "one?" : $one, is_null($two) ? "two ?" : $two); //OK
rochal asked 2020-01-04T12:50:05Z
11个解决方案
54 votes
你可以做E_NOTICE
如果为true,则将回显E_NOTICE,否则为'hello'。
请注意,如果未设置E_NOTICE但会设置,则会引发通知或严格错误。
这应该不成问题,因为大多数服务器都设置为忽略这些错误。 大多数框架都有触发这些错误的代码。
编辑:这是一个经典的三元运算符,但中间部分被忽略了。 自PHP 5.3起可用。
echo $test ? $test : 'hello'; // this is the same
echo $test ?: 'hello'; // as this one
这仅检查第一个变量的真实性,而不检查是否未定义,在这种情况下,它将触发E_NOTICE错误。 对于后者,请查看下面的PHP7答案(希望很快就会在上面)。
Yamiko answered 2020-01-04T12:51:08Z
47 votes
从PHP 7开始,您可以使用称为合并运算符的功能,该功能可以完全执行您想要的操作,而无需触发??触发的E_NOTICE。
要使用它,请使用??,它将检查左侧的值是否已设置并且不为null。
$arr = array($one ?? 'one?', $two ?? 'two?');
Yamiko answered 2020-01-04T12:51:35Z
42 votes
有关PHP7解决方案,请参见下面的@Yamiko的答案[https://stackoverflow.com/a/29217577/140413]
echo (!$test) ? 'hello' : $test;
或者您可以更强大一些,然后执行此操作
echo isset($test) ? $test : 'hello';
Jeff Busby answered 2020-01-04T12:50:20Z
5 votes
我很惊讶在其他答案中没有建议这样做:
echo isset($test) ? $test : 'hello';
如果$var不存在或设置为null,则从文档isset($var)将返回false。
@Yamiko描述了从PHP 7开始的null合并运算符,它是上述语法的快捷方式。
在这种情况下:
echo $test ?? 'hello';
Arth answered 2020-01-04T12:52:10Z
2 votes
一线。 超级可读,适用于常规变量,数组和对象。
// standard variable string
$result = @$var_str ?: "default";
// missing array element
$result = @$var_arr["missing"] ?: "default";
// missing object member
$result = @$var_obj->missing ?: "default";
实际操作中:Php沙盒演示
TrophyGeek answered 2020-01-04T12:52:38Z
1 votes
如果要以这种方式创建数组,则array_map提供了一种更简洁的方法(取决于数组中元素的数量):
function defined_map($value, $default) {
return (!isset($value) || is_null($value)) ? $default : $value;
// or return $value ? $default : $value;
}
$values = array($one, $two);
$defaults = array('one', 'two');
$values = array_map('defined_map', $values, $defaults);
只要确保您知道哪些元素的评估结果为false,即可进行正确的测试。
Felix Kling answered 2020-01-04T12:53:05Z
0 votes
也许有更好的方法,但这是我想到的第一件事:
echo (!$test) ? "Hello" : $test;
Sean Walsh answered 2020-01-04T12:53:26Z
0 votes
Null在PHP中为false,因此可以使用三元:
alert($test ? $test : 'Hello');
编辑:
这对于空字符串也适用,因为三元使用'==='等式而不是'=='
无论使用'==='还是'=='运算符,空字符串或null字符串都是false。 我真的应该先测试我的答案。
AndrewKS answered 2020-01-04T12:53:59Z
0 votes
好吧,扩展您提供的表示法意味着您想到了:
if (test) {
alert(test);
} else {
alert('Hello');
}
因此,这只是一个简单的if ... else构造。 在PHP中,您可以简化简单的if ... else构造,将其称为“三元表达式”:
alert($test ? $test : 'Hello');
显然,PHP中没有等效于JS 2687790553735103103488函数,但是构造是相同的。
Geoff Adams answered 2020-01-04T12:55:15Z
-1 votes
alert((test == null || test == undefined)?'hello':test);
Chris Pennycuick answered 2020-01-04T12:55:31Z
-1 votes
我最近遇到了同样的问题。这就是我解决的方法:
echo "Not Provided";}
else {
echo $row['test'];}?>