如果null在PHP中的一行中使用其他变量

时间:2011-02-14 22:45:56

标签: php

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

12 个答案:

答案 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