PHP中有类似JavaScript的东西:
alert(test || 'Hello');
因此,当测试未定义或为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
答案 0 :(得分:50)
你可以echo $test ?: 'hello';
如果为真,则会回显$test
,否则为'hello'
。
注意如果未设置$test
,则会发出通知或严重错误,但是......
这应该不是问题,因为大多数服务器都设置为忽略这些错误。大多数框架都有代码可以触发这些错误。
答案 1 :(得分:43)
从PHP 7开始,您可以使用名为coalesce operator的内容,它可以完全按照您的要求执行,而不会触发?:
触发的E_NOTICE。
要使用它,您可以使用??
来检查左侧的值是否设置为非空。
$arr = array($one ?? 'one?', $two ?? 'two?');
答案 2 :(得分:38)
echo (!$test) ? 'hello' : $test;
或者你可以更强大一点并且做到这一点
echo (!isset($test) || is_null($test)) ? 'hello' : $test;
答案 3 :(得分:4)
我很惊讶在其他答案中没有提出建议:
echo isset($test) ? $test : 'hello';
如果isset($var)
不存在或设置为空, From the docs $var
将返回 false 。
由@Yamiko描述的PHP 7以后的null coalesce运算符是上面的语法快捷方式。
在这种情况下:
echo $test ?? 'hello';
答案 4 :(得分:3)
一衬垫。超级可读,适用于常规变量,数组和对象。
// standard variable string
$result = @$var_str ?: "default";
// missing array element
$result = @$var_arr["missing"] ?: "default";
// missing object member
$result = @$var_obj->missing ?: "default";
查看实际操作:Php Sandbox Demo
答案 5 :(得分:3)
根据最新版本,请使用此速记
$var = $value ?? "secondvalue";
答案 6 :(得分:1)
如果要以这种方式创建数组,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);
请确保您知道which elements evaluate to false
,以便您可以应用正确的测试。
答案 7 :(得分:0)
可能有更好的方法,但这是我想到的第一件事:
echo (!$test) ? "Hello" : $test;
答案 8 :(得分:0)
PHP中的Null为false,因此您可以使用三元:
alert($test ? $test : 'Hello');
编辑:
这也适用于空字符串,因为三元使用'==='相等而不是'=='
无论使用'==='还是'=='运算符,空或null字符串都是false。我真的应该先测试我的答案。
答案 9 :(得分:0)
好吧,扩展你提供的符号意味着你提出:
if (test) {
alert(test);
} else {
alert('Hello');
}
所以它只是一个简单的if ... else结构。在PHP中,您可以将简单的if ... else结构缩短为称为“三元表达式”的东西:
alert($test ? $test : 'Hello');
显然,在PHP中没有与JS alert
函数等效的东西,但构造是相同的。
答案 10 :(得分:-1)
alert((test == null || test == undefined)?'hello':test);
答案 11 :(得分:-1)
我最近遇到了同样的问题。这就是我解决的问题:
<?php if (empty($row['test'])) {
echo "Not Provided";}
else {
echo $row['test'];}?></h5></span></span>
</div>
如果$ test row为空,则回显未提供
,数据库中的值为变量$ test..so