2011-05-23 9 views
21
<? switch ($var): ?> 
    <? case 1: ?> 
    It's 1! 
    <? break ?> 
<? endswitch ?> 

私は、PHPのテンプレートでswitch文を使っています。これはif文で可能です。上記のコードはPHP 5.3でParse error: syntax error, unexpected T_INLINE_HTML, expecting T_ENDSWITCH or T_CASE or T_DEFAULTを生成します。 PHP docsは、これが可能でなければならないことを示唆しています。PHPでのswitch文の挿入

誰かがこれがうまくいかないことを確認できますか、むしろ、私が間違っていることを教えてください。

ありがとうございました。

+1

を' Spudley

+1

これはドキュメントのどこに表示されますか?私はあなたが提供したリンクに行きましたが、switch文を使ってインラインHTMLを混ぜ合わせることについては何も知ることができません。 –

+1

<? (短いタグ)は廃止されていませんが、一部のサーバー構成との互換性がないため、回避されています。 – Steve

答えて

43

私はあなたの例がうまくいかないとphp docで読みました。

switch文と最初の大文字との間の任意の出力(空白を含む)は、構文エラーになります。たとえば、これが無効である

代わりにこれを試してみてください:

<div> 
<?php switch($variable): 
case 1: ?> 
    <div> 
    Newspage 
    </div> 
<?php break; ?> 
<?php case 2: ?> 
    </div> 
    Forum 
    <div> 
<?php break; ?> 
<?php endswitch; ?> 
</div> 

http://php.net/control-structures.alternative-syntax

+3

ありがとう! (他の人は、このコードは[このコメント](http://se2.php.net/manual/en/control-structures.alternative-syntax.php#80668)から) – Znarkus

14

をあなたは

switch($var): 
echo "\n\t"; 
case 1: 
になり、あなたのスイッチの後

?>\n\n<? 

を持っています10

HTMLを埋め込むのではなく、スクリプトをPHPでHTMLと考えてください。 PHPバイナリが最初にファイルを取得します。

HEREDOCのようなものを使用して、エスケープされていないHTMLをエコーアウトすることができます。

+0

ああそれは説明:)ありがとう! – Znarkus

2

私はこの簡単な書式設定、テストされ、作業提案:< `ちょうどあなたが使用する必要があります

<? switch($var) : case 1 : ?> 

    <div>One</div> 

<? break; case 2 : ?> 

    <div>Two</div> 

<? break; case 3 : ?> 

    <div>Three</div> 

<? break; endswitch; ?>