條件

2016-07-25 67 views
0

我有這個例子的偉大工程:條件

$text = 'Lorem Ipsum'; 

$html = <<<HTML 
<div> 
    <span>$text</span> 
</div> 
HTML; 

現在如何做到這一點正確的方式來獲得所選擇的選項2:

$val = 2; 

$html = <<<HTML 
<select> 
    <option if ($val == 1) {echo 'selected';} >Option 1</option> 
    <option if ($val == 2) {echo 'selected';} >Option 2</option> 
    <option if ($val == 3) {echo 'selected';} >Option 3</option> 
</select> 
HTML; 
+2

您不能在heredoc文字中編寫代碼。您必須迭代地組裝結果字符串。因此,只需檢查條件並連接即可。 – zerkms

回答

1

我認爲這是對模板的工作引擎 - 但不用擔心,使用非常簡單。

只有你需要的東西是用composer準備的項目,然後輕鬆地安裝一個模板引擎(在這個例子中,我拿起Latté)。在安裝咖啡拿鐵後

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
php composer-setup.php 

安裝作曲家

php composer.phar require latte/latte 

而在最後,你可以創建這樣的事情:

$latte = new \Latte\Engine; 

$latte->setTempDirectory('/path/to/tempdir'); 

$parameters['val'] = 2; 

$html = $latte->renderToString('template.latte', $parameters); 

,並把這個內容到同一目錄下的「template.latte」文件中:

<select> 
{foreach [1, 2, 3] as $key} 
    <option {if $val === $key}>Option {$key}</option> 
{/foreach} 
</select> 

該解決方案是使用專業的原因有很多:

  1. 放邏輯和側方的渲染,沒有混合的東西了。
  2. 所有變量都自動轉義(以避免XSS)
  3. DRY(不要重複自己)普林西比,與選擇該行應只能寫入一次

BTW,你總是應該使用三重平等的條件PHP(也比較變量的類型)。它更安全,您可以使用這個原則節省大量的調試時間:-)。

0

你必須移動if陳述了定界符的:

$sel1 = $sel2 = $sel3 = ''; 

    if ($val == 1) $sel1 = ' selected'; 
else if ($val == 2) $sel2 = ' selected'; 
else if ($val == 3) $sel3 = ' selected'; 

$html = <<<HTML 
<select> 
    <option$sel1>Option 1</option> 
    <option$sel2>Option 2</option> 
    <option$sel3>Option 3</option> 
</select> 
HTML; 

您可以通過使用variable variables縮短if/else梯:

$sel1 = $sel2 = $sel3 = ''; 

${"sel$val"} = ' selected'; 

$html = <<<HTML 
<select> 
    <option$sel1>Option 1</option> 
    <option$sel2>Option 2</option> 
    <option$sel3>Option 3</option> 
</select> 
HTML; 

可以還可以通過使用縮短空字符串分配陣列:

$sels = array_fill (1, 3, ''); 

$sels[$val] = ' selected'; 

$html = <<<HTML 
<select> 
    <option{$sels[1]}>Option 1</option> 
    <option{$sels[2]}>Option 2</option> 
    <option{$sels[3]}>Option 3</option> 
</select> 
HTML; 

注:上述是未經測試;我在手機上輸入了它。