【问题标题】:PHP7 Null Coalescing or if/then shorthand -- Evaluate rather than returnPHP7 Null Coalescing 或 if/then 简写——评估而不是返回
【发布时间】:2019-03-23 13:34:02
【问题描述】:

很长一段时间以来,我一直希望能够做到这一点而不会产生额外的麻烦:

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

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

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

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

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

: ''; 是否更改为 : false;: null; 无关紧要,因为在这里它们都会计算为空字符串。所以这真的是事情。怎么if/then不行,只能if/then/else

使用 PHP7 的空值合并双问号 ?? 运算符,它开始看起来越来越接近能够做到这一点。但我不认为这个运算符真的能解决问题。

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

echo $test2 ?? 'test3';

我们有“如果$test2 不是null,则立即返回。”所以我们无法在其中添加“Something before”。

三元运算符?: 也有类似的问题,这种情况是不可能的,因为它会立即返回一个真值。我不太介意!empty(),因为这是有必要的原因,但总是使用: ''; 对于一个常见的模式来说似乎有点笨拙......

【问题讨论】:

  • 但是,真正的问题是什么?
  • @Furgas ,为了使用一个变量,它必须被设置..所以我们通常用!empty()来检查......它可以解决很多常见的情况,以便能够测试该条件,如果满足,请使用变量(回显或分配)。因此,鉴于我们只需要先测试变量即可尝试使用它,通常我们不需要else case.. .而且似乎没有办法解决它:(虽然不错的链接!

标签: php conditional php-7 conditional-operator shorthand


【解决方案1】:

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

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

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

该行的后半部分只有在前半部分解析为 true 时才会执行。

编辑

应该注意,这可能是一种不好的做法,因为它可能会使其更难阅读,但它确实有效。

编辑 2

我的错,这只有在后半部分可以解析为布尔值时才有效,因此不适用于回显,但适用于分配。

【讨论】:

  • 我对此进行了测试,它似乎在回声中窒息,@ 987654324@ ...但我可以看到你的目标,我不确定为什么它不会解析...这是一个演示,只需单击执行代码:sandbox.onlinephpfunctions.com/code/… .. 感谢您提供想法!我认为对于分配它可能足够可读,但我明白你的意思.. 似乎它可能比我认为相当普遍的echo !empty($test2) ? 'something before ' . $test2 : ''; 更具可读性
  • 这会解析:if (!empty($test2)) echo 'something before ' . $test2;,但它不能解决赋值的情况,因为我们不能做类似$test3 = if (!empty($test2)) 'something before ' . $test2;的事情
猜你喜欢
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多