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

roc*_*hal 55 php

在PHP中有类似于JavaScript的东西:

alert(test || 'Hello');
Run Code Online (Sandbox Code Playgroud)

因此,当测试未定义或为null时,我们将看到Hello,否则 - 我们将看到test的值.

我在PHP中尝试了类似的语法但它似乎没有正常工作......而且我也不知道如何谷歌这个问题..

谢谢

编辑

我应该补充一点,我想在数组中使用它:

$arr = array($one || 'one?', $two || 'two?'); //This is wrong
Run Code Online (Sandbox Code Playgroud)

但实际上,我可以使用内联'?:'如果声明在这里,谢谢.

$arr = array(is_null($one) ? "one?" : $one, is_null($two) ? "two ?" : $two); //OK
Run Code Online (Sandbox Code Playgroud)

Yam*_*iko 55

你可以做 echo $test ?: 'hello';

$test如果它是真的,则会回显'hello'.

注意如果$test没有设置它将抛出通知或严格错误但是...

这应该不是问题,因为大多数服务器都设置为忽略这些错误.大多数框架都有触发这些错误的代码.

  • 忽略错误根本不是好的做法. (5认同)

Yam*_*iko 48

从PHP 7开始,您可以使用称为coalesce运算符的东西,它可以完全按照您的要求执行,而不会?:触发E_NOTICE .

要使用它,您??将使用它来检查左侧的值是否设置而不是null.

$arr = array($one ?? 'one?', $two ?? 'two?'); 
Run Code Online (Sandbox Code Playgroud)


Jef*_*sby 43

 echo (!$test) ? 'hello' : $test;
Run Code Online (Sandbox Code Playgroud)

或者你可以更健壮,并做到这一点

echo isset($test) ? $test : 'hello'; 
Run Code Online (Sandbox Code Playgroud)

  • 好吧,他说如果$ test未定义或null他想看'Hello',如果$ test的值是int(0)他仍然看到你好,即使它已设置而不是null因为php将0解释为false除非你'使用===.所以为了安全起见,他应该检查是否设置了$ test而不是null.至少这是我的逻辑. (4认同)
  • 为什么检查!$ test而不只是做$ test?$ test:'你好'; 代替? (2认同)

Kha*_*han 11

根据最新版本,使用它作为简写

$var = $value ?? "secondvalue";
Run Code Online (Sandbox Code Playgroud)


Tro*_*eek 6

单行。超级可读,适用于常规变量、数组和对象。

// standard variable string
$result = @$var_str ?: "default";

// missing array element
$result = @$var_arr["missing"] ?: "default";

// missing object member
$result = @$var_obj->missing ?: "default";
Run Code Online (Sandbox Code Playgroud)

看看它的实际效果:Php Sandbox Demo


Art*_*rth 5

我很惊讶在其他答案中没有建议这样做:

echo isset($test) ? $test : 'hello';
Run Code Online (Sandbox Code Playgroud)

如果不存在或设置为null ,则从文档isset($var)返回false$var

@Yamiko描述了PHP 7及以上版本的null合并运算符,它是上述语法的快捷方式。

在这种情况下:

echo $test ?? 'hello'; 
Run Code Online (Sandbox Code Playgroud)