-1

如果其他速记代码,我不明白我在做什么错

$item  = '<li '. ($avatar_size > 50) ? .'style="overflow:hidden">';

我只想检查条件是否为真,而不是添加内联样式。

编辑:当然在上面的语句中,>当条件为假时它也会被删除,所以我尝试了其他语句但没有工作。我确信我必须犯愚蠢的错误,但无法弄清楚。

$item  = '<li '. ($avatar_size > 50) ? .'style="overflow:hidden"'.:. '' .'>';
4

2 回答 2

5

没有“速记 if”,?:是一个运算符,它总是必须由? and :组成。你能做的最好的事情是:

$item  = '<li' . ($avatar_size > 50 ? ' style="overflow:hidden"' : null) . '>';
于 2013-01-27T08:33:02.717 回答
2

尽管最初的答案是正确的,但我有一个较晚的答案并提供了更多解释。

关于三元运算符

$expression ? $value1 : $value2

三元运算符像函数一样工作,例如它返回一个值。

哪个值?这就是第一个参数发挥作用的地方。它是一个被评估为true或的表达式false

如果为真,则将第二个参数作为值返回。如果为假,则返回第三个参数。

由于您在外部处理字符串,因此返回的值将用作字符串。然后只返回字符串值并且不要将代码的读者与返回 NULL 混淆是一个非常好的主意。尽管如此,它将被转换为空字符串。

快捷方式三元运算符

$expression ?: $value

这个省略了第二个值为 true 的值,如果结果为 true,则返回 $expression,否则返回 $value。这对于检查变量是否已定义并设置为一个值(除了那些评估为假的变量)非常有用,否则使用默认值。

通过反转表达式可以省略参数,但在您的情况下不可能返回空字符串或其他内容。

$avatar_size <= 50 ?: ' style="overflow:hidden"'

这不起作用,因为如果头像大小低于 50,将返回“true”并在字符串中使用 - 转换为"1".

于 2013-01-27T10:26:14.697 回答