3

我正在努力在 Wordpress 中制作助行器。我看到了一些示例代码,其中一行具有以下语法:

!empty($item->attr_title)
and $attributes .= ' title="'.esc_attr($item->attr_title).'"';

这是做什么的?我假设如果对象属性不为空,它会附加标题字符串,但我不确定“和”字在这里的作用。

4

4 回答 4

5

这是以下的简写:

if (!empty($item->attr_title)) {
   $attributes .= ' title="'.esc_attr($item->attr_title).'"';
}
于 2013-08-20T21:34:38.107 回答
5

PHP 对布尔表达式进行短路评估,也就是说,在结果确定之前,只评估尽可能多的项。

true and something()

将评估something()(完整的表达式仍然可以评估为假),而

false and something()

任期结束后将停止评估false

于 2013-08-20T21:35:33.097 回答
2

这是“短路评估”的一个例子。

这基本上是一种简写方式:

if(!empty($item->attr_title)) {
    $attributes .= ...
}

它之所以有效,是因为如果第一项为假,布尔运算将and停止评估。如果它是真实的,则评估右侧。由于我们对返回值不感兴趣,这与 if 语句的效果相同。

于 2013-08-20T21:35:36.147 回答
1

关键字(在这种and情况下与 相同&&)检查其左侧右侧的条件是否为真。有一个优化,如果左手条件为假,右手条件将不会被检查或执行。因此,您的代码将与以下内容相同:

if(!empty($item->attr_title) {
    $attributes .= ' title="'.esc_attr($item->attr_title).'"';
}
于 2013-08-20T21:35:54.497 回答