0

以下代码给出了语法错误,因为IF. 如何在不删除 IF 语句的情况下解决此问题?

<?php
    for ($i = 1; $i < 6; $i++){ 
        $data .= 'h'.$i.'{'.    
            if ( !empty ($size) ) {.
            'font-size: ' .$size. ';'.
            }.
        '}';
    }
?>

错误:

Parse error: syntax error, unexpected 'if' (T_IF)
4

7 回答 7

3

您不能if在表达式中使用语句,因为它在语法上是错误的,并且语句本身不返回值。?:使用可以嵌套在那里的三元运算符:

$data .= 'h' . $i . '{' . (!empty($size) ? "font-size: $size" : '') . '}';

您还可以受益于使用双引号插入变量而不是弄乱.运算符。

于 2012-10-03T09:37:08.117 回答
1
for ($i = 1; $i < 6; $i++) {
    $data .= "h$i{" . (!empty($size) ? "font-size: $size;" : "") . "}";
}
于 2012-10-03T09:36:29.690 回答
1

如果是内联的,您不能将完整的字符串串起来,因此以下任一方法都可以解决此问题:

for ($i = 1; $i < 6; $i++)
{//ternary
    $data .= 'h'.$i.'{'.( !empty ($size) ? 'font-size: ' .$size. ';' : '').'}';
}

这与写作相同:

for ($i = 1; $i < 6; $i++)
{
    $data .= 'h'.$i.'{';
    if (!empty ($size))
    {
        $data .= 'font-size: ' .$size. ';';
    }
    $data .= '}';
}

好吧,为了 100% 准确,三元运算符 concats ''if$size为空。三元语法如下:[evaluate statement] ? [if true] : [else]. 因此,该代码的真正完整等价物是:

for ($i = 1; $i < 6; $i++)
{
    $data .= 'h'.$i.'{';
    if (!empty ($size))
    {
        $data .= 'font-size: ' .$size. ';';
    }
    else
    {
        $data .= '';
    }
    $data .= '}';
}
于 2012-10-03T09:38:05.117 回答
1

我认为应该没有错误:

<?php
    for ($i = 1; $i < 6; $i++){ 
        $data .= 'h'.$i.'{' ;
            if ( !empty ($size) ) {
           $data .= 'font-size: ' .$size. ';';
            }
        $data .='}';
    }


?>
于 2012-10-03T09:38:51.463 回答
1

您不能if在字符串连接中使用,但可以使用短代码:

for ($i = 1; $i < 6; $i++){ 
        $data .= 'h'.$i.'{'.(!empty($size) ? ('font-size: ' .$size. ';') : '').'}';
}
于 2012-10-03T09:36:48.610 回答
1
for ($i = 1; $i < 6; $i++){ 
    $data .= 'h'.$i.'{'.((!empty ($size))?'font-size: {$size}':'').'}';
}

解释:

以下构造称为“三元 if”:

$x = ($test == "Y")?"Yes!":"No!";

和相同:

if ($test == "Y"){
  $x="Yes!";
} else {
  $x="No!";
}
于 2012-10-03T09:37:18.713 回答
1

您正在向以 . 开头的行中的字符串添加内容$data

两种解决方案:

1)停止添加东西,开始你的if,在里面添加更多东西,停止if,然后在新语句中添加其余部分。

$data .= 'h'.$i.'{';

if ( !empty ($size) ) {.
    $data .= 'font-size: ' .$size. ';'.
}.

$data .= '}';
  1. 使用三元运算符。

$data .= 'h'.$i.'{' (!empty($size) ? 'font-size: ' .$size. ';' : ''). '}';

三元运算符将第一个参数评估为真或假,并返回第二个或第三个参数,就像函数调用一样。

注意:过多使用三元运算符会使您的代码不可读,尤其是在彼此内部使用时。您始终可以将其替换为像上面这样的单独的 IF 构造,以获得更好的可读性。另外,除了返回两个值之一之外,三元运算符不能轻易扩展以做更多的事情。

于 2012-10-03T09:44:11.177 回答