我通过浏览phpBB2来学习PHP,甚至向他们的数据库提交了一些mod,其他人下载并使用了这些mod。 (我不相信phpBB2已经支持了phpBB3这么久了,所以v2 mods数据库不再存在了。)
关于phpBB,我最喜欢的一个是他们的模板系统,它让编辑器完全分离HTML和PHP。 PHP文件包含PHP:逻辑,数据库查询和激活模板。 TPL文件包含模板:HTML,模板变量和专用HTML注释,以允许条件或重复块。
但是,无论何时我在网上看到某人的PHP代码,它都是使用单个函数等的小代码片段,或者PHP中充满了包含HTML的字符串(或者更糟糕的是,PHP与PHP散布在一起)。 phpBB是我看过的唯一一个实际上将语言和标记语言分开的PHP,向我建议很少有其他PHP代码库做这样的事情。
我希望再次开始使用PHP,但这次它不会是一个phpBB论坛,而且它将在一个团队中。 根据我的经验,PHP和HTML的分离并不常见(如果我错了,请纠正我!)。但是,我已经习惯了那个分界线,我讨厌阅读混合的PHP和HTML。
在PHP编程的“现实世界”中,首选方法是什么:
答案 0 :(得分:7)
如果要将PHP与HTML分开,可以使用模板引擎(如smarty http://www.smarty.net/)。
答案 1 :(得分:4)
我们为MVC使用自定义代码点火器基础,只是将逻辑和布局分开。这并不一定意味着我们的html中没有php,只是它不用于逻辑。在模板imho中使用php代码循环记录集是完全可以的,只是不要尝试与业务对象交谈并实际在布局模板中执行操作。如果你真的想要摆脱那里的所有PHP代码,那么你可以在模板中查看类似tal或者其他一百万个模板的东西。我觉得这种情况大多有些过分,除非“在这里插入特殊情况”
编辑修复错误
答案 2 :(得分:4)
就个人而言,我认为没有理由在PHP中添加模板系统/语言,因为PHP已经是一个非常好的解决方案。
我首选的方法是将显示与应用程序的逻辑分开。这可以采用完整的MVC框架的形式。但是,如何编写代码也很简单。
扩展:
自从错误地用大量的ASP代码散布我的HTML之后,我试图将页面逻辑与显示分开。在单个页面中,这意味着将所有页面逻辑放在顶部,存储要在变量中显示的信息,然后在PHP文件底部的HTML中回显它们。 HTML部分中出现的唯一逻辑是显示逻辑。换句话说,简单的错误处理,ifs,循环等等。基本上,你会在大多数模板语言中找到相同的东西。
我避免使用模板语言的原因是我需要担心的另一种语法形式。重点是什么?为此目的,PHP提供的功能超出了我的需要。
与此同时,您可以通过分离事物来采用简单的MVC方法:
Controller.php这样
<?php
// some application logic
$data['message'] = 'Hello, World.';
include 'view.php';
exit;
?>
view.php:
<html>
<head>
<title>
A simple 'MVC' view
</title>
</head>
<body>
<p>
<?php
echo $data['message'];
?>
</p>
</body>
</html>
这并非没有缺点和问题。但是,如果您认为应用程序逻辑和显示之间可以完全清晰地分离,那就错了。
答案 3 :(得分:3)
根据我的经验,许多PHP开发,无论是好是坏,最终都是通过包含根据需要打印出HTML片段的php文件相互连接。
请注意,我的大部分PHP经验都是针对“我们只需要一些有效的”解决方案,而不是“我们需要最优雅,最有效的解决方案”
答案 4 :(得分:3)
每当我在网上看到某人的PHP代码时,它或者是一个使用单个函数的小代码,或者PHP中充满了包含HTML的字符串(或者更糟糕的是,PHP与PHP散布在一起)。
是的,代码的一般质量令人尴尬。
虽然你可以使用自己的成熟模板引擎,但这可能有点过分,在许多情况下,当你可以编写表示逻辑时,他们提供的有限的特定于域的语言会妨碍你。 PHP。
如果你还想写普通的PHP,但没有意大利面:
将操作代码保留在文件顶部或其他文件中。在这里只放置应用程序逻辑,而不是任何类型的HTML或模板。在此阶段生成的任何需要由模板显示的信息都需要输入变量以传递给模板部分,不 print
在加载过程中输出业务逻辑。
了解基于标记的模板并将其应用于PHP。为HTML和PHP表示逻辑提供单一的,正确缩进的代码层次结构,就好像您正在编写“格式良好”的XML(无论您是否实际使用XHTML)。避免不惜一切代价将HTML放入字符串中。
定义一种更简单的方法来调用htmlspecialchars()
,因为否则一直打字会是一个真正的痛苦,如果你不打算一直输入它潜在的安全敏感错误。
总结一下,例如:
<?php
// active code here
// do things
// put any errors in a $errors array
// this trivial function would presumably be in an include
//
function h($s) {
echo htmlspecialchars($s, ENT_QUOTES);
}
?>
<body>
<?php if (count($errors)!=0) { ?>
<ul id="errors">
<?php foreach ($errors as $error) { ?>
<?php h($error); ?>
<?php } ?>
</ul>
<?php } ?>
...
</body>
在PHP编程的“现实世界”中,首选方法是什么:
哦,在PHP编程的现实世界中,平均项目有一种混乱的方法混合在一起,没有任何想法。在现实世界中,代码是不可维护的,错误的,不安全的。您不希望查看行业标准,因为行业标准将以各种方式被打破。
答案 5 :(得分:2)
我更喜欢使用模板系统来最小化HTML文件中包含的PHP代码量。我真的没有看到任何方法将PHP与HTML完全分开,但我觉得将业务逻辑(数据库)与表示逻辑分开就足够了。
我的模板系统是自制的,但我相信你可以通过预先形成谷歌搜索来找到各种可行的模式。
答案 6 :(得分:2)
根据我的经验,PHP和HTML的分离并不常见
真。但很多PHP代码都是由经验不足的开发人员编写的。此外,PHP并不鼓励,而是不鼓励编写好的代码,并且将HTML与编程代码混合的能力就是其中的一个例子。
如果您希望使用高质量的代码,以便能够轻松维护和扩展它,我强烈建议您使用模板引擎或类似的东西。混合使用会对代码的可读性产生巨大影响,并会导致某些事情随着时间的推移变得越来越糟糕。重构将是痛苦的,如果不是不可能的话。
现在,您可以选择将HTML与PHP分开的方法
最明显的一个是使用现有的布局引擎。有很多,有些做得很好,性能影响很小。
您也可以编写自己的引擎。对于一个大型项目(为什么重新发明轮子?)可能不是一个好主意,但是无论是在一个小项目上,还是在需要非常具体的项目时,它都可以成为解决方案。
我在大多数项目中使用的最后一种方法是从业务层构建XML(PHP中的XML序列化非常简单),然后使用XSLT将其转换为HTML页面。它可以使网站更容易维护和更容易理解,顺便说一句,它可以在需要时以编程方式访问网站数据(加载XML而不是HTML页面)。另一方面,它大大降低了性能,因此不适用于每秒有数千个查询的大型网站。
答案 7 :(得分:0)
大多数代码都以PHP和HTML字符串开头,然后在重写期间演变为模板系统。预先将内容与逻辑分开需要团队之间的设计,规划和沟通。使用XML或JSON而不是PHP数组作为数据格式使这更容易。
答案 8 :(得分:0)
您只需在HTML之间添加打开<?php
和关闭?>
PHP标签即可在HTML内混合PHP,反之亦然。
<!DOCTYPE html>
<head>
<title>Hello world as text</title>
</head>
<body>
<?php
echo "<p>Hello world</p>";
?>
</body>
</html>
有关更多详细信息:https://stackhowto.com/how-to-combine-html-and-php/