变量内部条件

时间:2016-07-25 22:10:29

标签: php html

我有一个很好用的例子:

$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 个答案:

答案 0 :(得分:1)

我认为这是模板引擎的工作 - 但不用担心,这很容易使用。

只有您需要的是使用composer准备项目,然后轻松安装其中一个模板引擎(对于此示例,我选择了Latté)。

安装作曲家:

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

之后安装Latté:

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(不要重复自己)原则,带选项的那行只能写一次
  4. 顺便说一下,你总是应该在PHP中使用三等份(比较变量的类型)。它更安全,你可以使用这个原则节省大量的调试时间: - )。

答案 1 :(得分:0)

您必须将if语句移出heredoc:

$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;

注意:以上是未经测试的;我在手机上输入了它。