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

。で始まる行の文字列に何かを追加している最中です$data

2つの解決策:

1)ものの追加を停止し、ifを開始し、内部にさらにものを追加し、ifを停止して、残りを新しいステートメントに追加します。

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

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

$data .= '}';
  1. 三項演算子を使用します。

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

三項演算子は、関数呼び出しと同様に、最初の引数をtrueまたはfalseのいずれかに評価し、2番目または3番目の引数を返します。

注意:三項演算子を使いすぎると、特に相互に使用する場合に、コードが読み取れなくなります。読みやすくするために、上記のようにいつでも別のIF構造に置き換えることができます。さらに、三項演算子は、2つの値のいずれかを返す以外に、より多くのことを行うために簡単に拡張することはできません。

于 2012-10-03T09:44:11.177 に答える
1
for ($i = 1; $i < 6; $i++) {
    $data .= "h$i{" . (!empty($size) ? "font-size: $size;" : "") . "}";
}
于 2012-10-03T09:36:29.690 に答える
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}':'').'}';
}

説明:

次の構成は「ternaryif」と呼ばれます。

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

と同じです:

if ($test == "Y"){
  $x="Yes!";
} else {
  $x="No!";
}
于 2012-10-03T09:37:18.713 に答える
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%正確にするために、三項演算子は空の''場合に連結し$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 に答える