html 中的 php 变量,别无他法: <?php echo $var; ?>
Posted
技术标签:
【中文标题】html 中的 php 变量,别无他法: <?php echo $var; ?>【英文标题】:php variable in html no other way than: <?php echo $var; ?> 【发布时间】:2011-01-10 03:37:02 【问题描述】:我在混合 html 和 php 方面做了很多工作,大多数时候我只想要包含一些 PHP 变量的纯 HTML,所以我的代码如下所示:
<tr><td> <input type="hidden" name="type" value="<?php echo $var; ?>" ></td></tr>
这很丑陋。有没有更短的,更像下面的?
<tr><td> <input type="hidden" name="type" value="$$var" ></td></tr>
这是可能的,但你会被 ""
卡住(你必须用 ''
替换它们)并且布局消失了
echo "<tr><td> <input type="hidden" name="type" value="$var" ></td></tr>"
还有什么更好的吗?
【问题讨论】:
请记住,PHP 使用单引号比使用双引号更快,如果必须,请使用 echo '您的代码有短标记版本,现在完全可以使用,尽管其他方面的建议过时:
<input type="hidden" name="type" value="<?= $var ?>" >
其中(PHP 5.4 之前)需要在您的 php 配置中启用短标签。它的功能与您输入的代码完全相同;这些行的内部实现实际上是相同的:
<?= $var1, $var2 ?>
<?php echo $var1, $var2 ?>
内置解决方案就是这样。有很多 3rd 方模板库可以更轻松地将数据嵌入到您的输出中,smarty 是一个很好的起点。
【讨论】:
@code_burgar 短标签不会从 PHP6 中移除,目前也不会被弃用。 嗯,我可能是错的,但我很确定他们会被删除。即使他们留下来,使用它们充其量也是一种值得怀疑的做法。 = 哎呀。更不用说它们在某些服务器上默认禁用。 @code_burgar 不要在 PHP 脚本中编写 XML,XML 对数据进行编码并写入结果输出。我从来没有遇到过禁用 short_open_tags 的服务器。 没有。 默认情况下,无论 ini 设置如何,在 PHP >= 5.4 中都会启用短回显。无需再设置short_open_tag
,您可以随意使用<?=
和?>
在您的视图中获取干净的代码。即使在 2010 年,曾经被弃用的短标签也是完整的,完全是垃圾。
为了呼应@Jimbo 的观点,<?
和<?=
经常被混淆。不鼓励前者,后者很好,从 PHP 5.4 开始,后者始终可用(请参阅 php.net/manual/en/ini.core.php#ini.short-open-tag )您只需要小心确保 short_open_tag
已打开(它是 PHP_INI_ALL
,这意味着它可以如果使用 php 5.3 及更早版本,请在脚本中打开。【参考方案2】:
使用HEREDOC 语法。您可以将单引号和双引号、变量甚至函数调用与未更改/未转义的 html 标记混合使用。
echo <<<MYTAG
<tr><td> <input type="hidden" name="type" value="$var1" ></td></tr>
<tr><td> <input type="hidden" name="type" value="$var2" ></td></tr>
<tr><td> <input type="hidden" name="type" value="$var3" ></td></tr>
<tr><td> <input type="hidden" name="type" value="$var4" ></td></tr>
MYTAG;
【讨论】:
我对 HEREDOC 语法的唯一问题是它无法突出显示页面 HTML 部分的语法。 @meagar 在某些编辑器中会这样做,除非您有一个规则集来覆盖它。 只是祈祷你永远不需要索引克林贡船 :) 关于编辑器,使用 VIM 新的 HEREDOC 链接:php.net/manual/en/…【参考方案3】:有很多模板系统可以为您的视图提供更紧凑的语法。 Smarty 是受人尊敬和受欢迎的。 This article 列出了另外 10 个。
【讨论】:
【参考方案4】:我建议不要使用短标签,有关原因的更多信息,请参阅 Are PHP short tags acceptable to use?。
我个人不介意像这样混合 HTML 和 PHP
<a href="<?php echo $link;?>">link description</a>
只要我有一个具有良好语法突出显示的代码编辑器,我认为这是非常易读的。 如果您开始使用 PHP 回显 HTML,那么您将失去语法高亮 HTML 的所有优势。 回显 HTML 的另一个缺点是带有引号的内容,恕我直言,以下内容的可读性要差很多。
echo '<a href="'.$link.'">link description</a>';
在 PHP 中简单的回显和简单循环以及在 HTML 中完成其余部分对我来说最大的优势是缩进是一致的,这最终提高了可读性/可扫描性。
【讨论】:
没有人应该永远将该问题用作参考,这是一堆错误信息和主观意见。 @meagar:没错!更不用说,那里的注释突出显示 this link 指定短回显标记从 php5.4 开始的短开放语法中分离。这就是它(上述链接末尾的手册)所说的。 "echo 也有一个快捷语法,你可以在开始标签后面紧跟一个等号。在 PHP 5.4.0 之前,这个简短语法只适用于 short_open_tag 配置设置启用。"跨度> 【参考方案5】:我真的认为您应该采用 Smarty 模板引擎作为您项目的标准 php 库。
http://www.smarty.net/
Name: $name|capitalize<br>
【讨论】:
你赞成的论点是什么? 赞成的论点: - 将 php 代码与 html 分离(更好的维护) - smarty 模板将按原样显示在浏览器中。 (没有编程经验的前端设计师可以更好地理解它) - 缓存。 (您可以根据输入保存页面的多个缓存副本,这比再次生成整个页面要快得多)缺点 - smarty 有点太强大了,程序员可以将太多逻辑放入模板中......但是至少是显示逻辑 正是他所说的。你不会写一个数据库连接类来连接你的数据库吧?为什么要写模板引擎来做模板? 当结构、风格和编程由更多(不同的)人完成时,模板系统是好的,对于小项目——当只有一两个程序员时——它甚至会花费你的时间。 @jave.web 与数据库连接器类相同。这都是关于权衡的。对于这个问题,使用 smarty 比 php 短标签要早几年,而且缺点很少。【参考方案6】:在 HTML 部分之前的 php 部分中,使用 sprinf() 从变量中创建一个常量字符串:
$mystuff = sprinf("My name is %s and my mother's name is %s","Suzy","Caroline");
然后在HTML部分你可以为所欲为,比如:
<p>$mystuff</p>
【讨论】:
以上是关于html 中的 php 变量,别无他法: <?php echo $var; ?>的主要内容,如果未能解决你的问题,请参考以下文章