2017-05-26 60 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; 
}; 
?> 

以及如何對嵌套IF函數?:內的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「中期聲明。 wline定義一個數組,例如你不能關閉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的人,這會讓你的代碼難以閱讀和維護。站在堅強,寫出美麗的代碼:)

更新:(在@Jaume Mal問題更新後) 我並不是指我的答案中的例子是排他性的,而是作爲完整的語句的例子,不完整的。 (我也忘記提及關閉PHP標籤中功能,這也是工作,但我鄙視和woudl強烈建議反對。)因此,例如<?php function foo(){是一個完整的聲明啓動一個函數,但(作爲其他案件與循環等..)它需要一個結束語,在這種情況下,}。這是真實的的if/else或的foreach等:

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

是合法的代碼,因爲PHP標籤內的代碼段完成陳述。

+0

Victor,謝謝你的回答。我想我明白你的意思。只是一個評論,你的答案有些部分我不明白,因爲語法或拼寫錯誤,例如:「避免使用簡寫速記是安全的,因爲這不受新PHP版本的設置的影響」,你可以看看好嗎?再次感謝 –

+0

@JaumeMal「<?」是一個短打開的,並不支持所有的服務器。一個php塊的正確打開是「<?php」。關閉是兩個相同的 – dgeare

+0

@dgeare我知道,謝謝。 –