我有一个非常有效的例子:
$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;
我认为这是模板引擎的工作,但不用担心,它非常容易使用。
你只需要用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>
专业人士使用此解决方案的原因有很多:
- 把逻辑和渲染放在一起,不会把事情搞混
- 所有变量都会自动转义(以避免XSS)
- DRY(不要重复自己)原则,带选项的行应该只写一次
顺便说一句,在PHP中,您应该总是在条件中使用三重相等(同时比较变量的类型)。它更安全,并且可以使用以下原理节省大量调试时间:-)。
您必须将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;
您可以使用变量缩短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;
注:以上内容未经测试;我把它打在手机上了。