2017-05-26 14 views
1

を機能私はカービィのCMSに基づいて、PHPプロジェクトのウェブ・プログラマーと協力し、彼のようなすべての行を開閉したい:しようとオープン&クローズPHPタグ、配列内、

<main> 
    <?php /*php code here/* ?> 
    <?php /*more php here*/ ?> 
... 

このスタイルに従うために、私は自分のコードにいくつかの誤りを見つけました。

BAD CODE 

<?php $oo = array(?> 
<?php 'h' => 100, ?> 
<?php 'v' => 100, ?> 
<?php); ?> 

が、私のようなforeachループの途中でそれを行うことができます:最初は、私のような配列の途中でこれを行うことができないようだということです

<?php foreach ($p as $subp): ?> 
    <div id='<?= $subp->title() ?>'> 
<?php endforeach; ?> 

があります私はこれを行うことができない配列のような他のケース?

答えによると/編集

、唯一の「foreachの」、「しばらく」内のタグ・ブレーク、または「もし」ブロックが存在することができます。

関数内で 'foreach'、 'while'または 'if'はどうですか?であること

<?php 
function myFunction($arg){ 
    if($arg === 'this'): ?> 
    <?= '<p>yep</p>' ?> 
    <?php else: ?> 
    <?= '<p>nop</p>' ?> 
    <?php endif; 
}; 
?> 

?: '法的' そして、どの程度機能:?内のforeach内

<?php 
function myFunction($arr){ 
    foreach($arr as $val): ?> 
    <p><?= $val ?> <p> 
    <?php if($val === 'this'): ?> 
     <?= '<p>yep</p>' ?> 
    <?php else: ?> 
     <?= '<p>nop</p>' ?> 
    <?php endif; 
    endforeach; 
}; 
?> 

編集

ありがとう/

+0

それぞれの行が開いて閉じているのが奇妙だと思われますが、それは非常に興味深い質問です。 +1した。 –

+0

結果はhtmlに改行が** LOT **あり、 'header'のような機能は動作しませんので、出力に影響します。 –

+1

基本的には、声明の真ん中にいれば、それを打ち破ることはできません。あなたがコントロール構造の真中にいれば、あなたはほとんど可能です。しかし、それはあなたが*すべきであるという意味ではありません。 – aynber

答えて

3

あなたは「から抜け出すことができない場合はネストphp "midステートメント。例えばphpタグを閉じることはできません。唯一の時間は、PHPの "ブレークアウト"できるループまたはif/elseステートメントの開閉です。これは実際には<?php foreach: ?>が完全なステートメントであるのに対し、<?php foreach{ ?>はステートメントを破ることはありません。ここであなたができることのいくつかの例:

<?php if($this!=$that): ?> 
{something} 
<?php endif ?> 

<?php foreach($things as $thing): ?> 
{something} 
<?php endforeach ?> 

<?php $while($this): ?> 
{something} 
<?php endwhile ?> 

あなたはメッセージを受け取ったと思います。あなたはPHPタグ内で、中断することなく完全なステートメントを持っている必要があります。

P.S. <?phpの代わりに簡略<?を使用することは避けてください。プロジェクトを別のホストに移動するか、ホストのアップグレードによってデフォルトのショートタグがアクティブにならないため、プロジェクトが中断する可能性があります。 <?= ?>これは新しいPHPバージョンの設定の影響を受けないので、安全です。

P.P.S PHPを1行で欲しい人に耳を傾けないでください。これはコードの読み込みと保守を難しくします。強く立って、美しいコードを書いてください:)

更新:(@Jaume Malからの質問の更新後) 私の答えの例は排他的ではありませんが、完全なステートメント不完全な。 (私はまたfuctionタグの中途半端なphpタグを書くのを忘れていましたが、うまくいきましたが、私は軽蔑し、強くアドバイスしています。)例えば<?php function foo(){は関数を開始する完全なステートメントですこの場合は}となります。これがあれば/ ELSEまたはforeachのなどのために真である:PHPタグ内のコード片は、完全なステートメントですと

<?php if($this){ ?> 
some code 
<?php } ?> 

は、有効なコードです。

+0

ビクター、あなたの答えに感謝します。私はあなたが意味するものを得ると思います。ちょうどコメント、あなたの答えのいくつかの部分は、文法やタイプミスのために理解できません。例えば、「略語を使わないでください。これは新しいPHPバージョンの設定に影響されないので安全です。それはどうですか?再度ありがとう –

+0

@JaumeMal "<?"ショートオープンであり、すべてのサーバーでサポートされていません。 PHPブロックの適切なオープンは "<?php"です。近くは同じです。 – dgeare

+0

@dgeare私は気付いています、ありがとうございます。 –

関連する問題