PHP7 Null Coalescing或if / then速记 - 评估而不是返回

问题描述 投票:0回答:1

很长一段时间以来,我一直希望能够做到这一点,而不需要额外的轻微划分:

$test = 'test';
echo !empty($test2) ? 'something before ' . $test2 : '';

这将返回一个空字符串,因为没有定义$test2

$test = 'test';
$test2 = 'test2';

echo !empty($test2) ? 'something before ' . $test2 : '';

当定义"Something before test2"时,这将返回$test2

如果: '';改为: false;: null;并不重要,因为在这里他们都将评估为空字符串。所以这才是真的。为什么不可能做if/then,只有if/then/else

使用PHP7的空合并双问号??运算符,它开始似乎越来越接近能够做到这一点。但我不认为这个操作员实际上是这样做的。

$test = 'test';
$test2 = 'test2';

echo $test2 ?? 'test3';

我们有“如果$test2不是null,那么就马上回来吧。”所以我们无法添加“Something before”。

三元运算符?:有一个类似的类似问题,这种情况是不可能的,因为它立即返回一个真值。我不太介意!empty(),因为它有必要为什么它是必要的,但总是加强: '';似乎有点苛刻的共同模式......

php conditional php-7 conditional-operator shorthand
1个回答
0
投票

是的,可以使用&&运算符。

$test = 'test';
$test2 = 'test2';

!empty($test2) && ($test2 = 'something before ' . $test2);

该行的后半部分仅在前半部分解析为真时执行。

编辑

应该注意的是,这可能是不好的做法,因为它可能会使它更难阅读,但它的工作原理。

编辑2

我的不好,这只有在下半部分可以作为布尔值解析时才有效,因此不适用于回声,但适用于赋值。

© www.soinside.com 2019 - 2024. All rights reserved.