如果则 php,如果为null,则在PHP的一行中使用其他变量

如果为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'];}?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值