【问题标题】:separating php and html... why?分离 php 和 html... 为什么?
【发布时间】:2009-05-31 08:56:47
【问题描述】:

所以我在各种网站、页面上看到了一些cmets,以及我问过的关于分离php和html的问题。

我认为这意味着这样做:

<?php

myPhpStuff();

?>

<html>

<?php

morePhpStuff();

?>

而不是:

<?php

    doPhpStuff();

    echo '<html>';

    ?>

但为什么这很重要?这样做真的很重要还是一种偏好?


当我开始使用 PHP 时,似乎在 while 循环中中断 PHP 之类的操作会导致错误。也许这不再是真的,或者从来都不是。


我用这个概念做了一个小例子,但对我来说它看起来很乱:

<?php

$cookies = 100;
while($cookies > 0)
{
    $cookies = $cookies -1;
?>
    <b>Fatty has </b><?php echo $cookies; ?> <b>cookies left.</b><br>

<?php

} 

?>

是否存在将 HTML 放在 PHP 中更好的情况?

<?php

$cookies = 100;
while($cookies > 0)
{
    $cookies = $cookies -1;

    echo'<b>Fatty has </b> '.$cookies.' <b>cookies left.</b><br>';
} 

?>

【问题讨论】:

  • 这些都不是分离,是意大利面条编码。
  • 你能给我或指出一个分离的例子吗,因为每当我看到它写的时候,它指的是像我的例子一样的东西。
  • 查看模板引擎中的示例。 www.smarty.net
  • 分离不是来自CSS吗?

标签: php html formatting


【解决方案1】:

当人们谈论分离 PHP 和 HTML 时,他们可能指的是将网站的呈现与用于生成它的代码分离的做法。

例如,假设您有一个 DVD 租赁网站,并且在主页上显示了可用 DVD 的列表。您需要做几件事:从数据库中获取 DVD 数据,提取和/或格式化该数据,并可能混合来自多个表的一些数据。格式化输出,将 DVD 数据与 HTML 相结合,创建用户将在浏览器中看到的网页。

将 HTML 生成与其余代码分开是一种很好的做法,这意味着您可以轻松更改 HTML 输出(表示),而无需更改业务逻辑(数据的读取和操作)。反之亦然,您可以更改您的逻辑,甚至您的数据库,而无需更改您的 HTML。

一个常见的模式称为MVC (model view controller)。 您可能还想查看 Smarty 库 - 它是一个广泛使用的 PHP 库,用于分离表示和逻辑。

【讨论】:

  • 史蒂夫·克拉里奇擅长回答问题,还有足球,谁知道呢!
【解决方案2】:

让我们弄清楚什么不是分离

  • 你从 php 模式切换到 html 模式
  • 您使用 print 或 echo 语句写出 html 代码
  • 你在 html 文件中使用了小的 php 片段

如果这样做,则根本没有分离,无论是从php转义到html块还是以其他方式将php代码放入html。

看看一个好的模板引擎,手册的“为什么使用....”部分有很多理由。我建议 www.smarty.net 特别是http://www.smarty.net/whyuse.php

它会回答你现在所有的问题。

【讨论】:

  • 谢谢!我在网站上看到的大多数关于分离的参考都出现在教程或示例代码中,我猜人们指的是在 PHP 模式和 HTML 模式之间切换。我已经看了一下 Smarty,现在我明白了这个概念。一般的想法是让我的 PHP 页面......然后引用我的 HTML 输出页面,然后那个 HTML 页面将包含任何最小的 PHP 输出变量吗?说 login.php ->includes output.html 里面有几个 echo $name?> 个项目。
【解决方案3】:

在项目中将应用程序逻辑与表示逻辑分开是非常重要的。好处包括:

  • 可读性:如果不混合 PHP 和 HTML,您的代码将更容易阅读。此外,如果在 PHP 字符串中存储和转义 HTML,HTML 可能会变得难以阅读。
  • 可重用性:如果您在 PHP 代码中硬编码 HTML 字符串,则该代码将非常适合您的项目,并且无法在以后的项目中重用您的代码。另一方面,如果您编写一次只执行一项任务的小函数,并将 HTML 放入单独的模板文件中,那么在未来的项目中重用您的代码将是可能的,而且会容易得多。
  • 在团队中工作:如果您在一个包含开发人员和设计人员的团队中工作,那么分离应用程序逻辑和演示模板将对双方都有利。开发人员将能够在应用程序上工作而不必担心演示,而设计人员(不一定会非常了解 PHP)将能够创建和更新模板而不会弄乱 PHP 代码。

【讨论】:

    【解决方案4】:

    对于包含大量 HTML 的页面,将 PHP 代码嵌入到页面中可能会更容易。这是 PHP 背后的最初意图之一。无论如何,当您开发具有大量逻辑、不同类型的连接、数据操作的应用程序时……如果您只想将 PHP 代码嵌入显示给用户的相同页面中,那么您的 PHP 代码就会变得过于复杂。然后维护的故事开始了。您将如何更改代码中的某些内容、修复错误、添加新功能?

    最好的方法是将不同文件(甚至是目录)中的逻辑(大部分代码是 PHP)与页面文件(大部分代码是 HTML、XML、CSV...)分开。

    多年来,这一直是开发人员关注的问题,并且有一些建议可以解决这些一般性问题,称为设计模式。

    由于不是每个人都有经验,并且可以将这些设计模式应用到他的应用程序中,因此一些有经验的开发人员创建了框架,这将帮助其他开发人员使用该框架所掌握的所有知识和经验。

    当您查看 toady 最常用的 PHP 框架时,您会看到所有这些框架都将代码放入特殊目录中的 PHP 类中,进行配置,并且......在这些文件中,您都看不到一行 HTML。但是有用于向用户显示结果的特殊文件,它们有很多 HTML,因此您可以将 PHP 值嵌入到这些 HTML 页面中以向用户显示。但请记住,这些值不是在同一页面上计算的,它们是许多其他 PHP 代码的结果,这些代码编写在其他没有 HTML 的 PHP 文件中。

    【讨论】:

    • 我想我看到了分离背后的概念,但是开始有太多只是 PHP 的文件并且从一开始分离它们的用处就降低了不是很容易吗?应该有一些平衡吗?
    【解决方案5】:

    我发现最好将应用程序逻辑与视图文件分开(使用带有 MVC 的 CodeIgniter 框架做得很好),因为它使代码看起来相对整洁且易于理解。我还发现,将两者分开会减少 PHP 错误的余地,如果 HTML 元素与 PHP 分开,则可能出错的 PHP 数量会更少。

    最终我认为这取决于偏好,但我认为分离具有以下优点:

    • Titier 代码
    • 误差幅度较小
    • 易于解释
    • 更容易更改 HTML 元素
    • 更容易更改应用程序逻辑
    • 加载速度更快(HTML 不会从 Parser->Browser 直接进入浏览器)

    不过也有一些缺点:

    • 它只适用于 PHP5(我相信,可能是错误的,如果需要,请纠正)
    • 这可能不是人们习惯的样子
    • 如果做错了就会不整洁(没有缩进等,但是任何东西都是一样的)

    但正如您所见,利大于弊。尽量不要将两者混为一谈,一些分离和一些整合 - 这可能会让您自己和与您合作的其他开发人员感到困惑。

    我希望这会有所帮助。

    【讨论】:

    • 好的,谢谢。我认为它可能在较旧的 PHP 版本中不起作用...打破循环,例如我上面提到的。
    • 是的,我认为可能是这样,不完全确定我是否正确,但我想我听说过它,我已经在 PHP5 中完成了我的大部分 php,所以还没有真的不得不处理这些问题
    【解决方案6】:

    第一种方法的好处(分离PHP和HTML):

    • 您不需要转义字符

    • 代码编辑器也可以 突出/缩进标记。

    • 可以说更容易阅读

    • 这种方法没有缺点, 与第二种方法相比。

    【讨论】:

      【解决方案7】:

      从功能上讲:它们都可以工作,所以最终它是一种偏好。

      然而,您可能会认为 cmets 也是一种偏好,您的代码在没有 cmets 的情况下编译和运行的效果完全相同。然而,大多数人会同意 cmets 对于编写和维护好的代码是必不可少的。我认为这是一个类似的主题。从长远来看,如果两者分开,它将更容易阅读和维护代码。

      那么重要吗?我会说是的。

      【讨论】:

        【解决方案8】:

        我开始:第一个您可以在 WYSIWYG 编辑器中打开,仍然可以看到一些标记,这可能更容易维护。

        【讨论】:

          【解决方案9】:

          它说你在echo ''里面放的东西是先被编程语言处理然后发送到浏览器的.

          正如上面所说的第二个原因是您应该将“大型编程代码”与 html 代码分开存储,并且在 html 代码中只需调用一些调用来打印结果,例如“echo $variable”。或者使用 Smarty 之类的模板引擎(就像我一样)。

          最好的问候, 亚历山德鲁。

          【讨论】:

            【解决方案10】:

            哎哟!

            您问题中的所有示例都完全无法阅读。我想说,你自己和那些可能会阅读你的代码并使用各种模板引擎的人,比如Smarty。它非常易于设置和使用,它将您的代码与演示分开。它不需要您将所有内容都放在类中,它只是确保您的逻辑在 一个 文件和演示文稿中 - 在 另一个 一个中。

            【讨论】:

            • 是什么让它们难以阅读。是不是有点小而简单难以阅读。我很早就被指出聪明,但我想我在这里要学习的只是它背后的一般概念,我宁愿自己学习。为了可读性和分离,分离或格式化我的示例的正确方法是什么?
            • 好吧,看看您原始帖子中的第三个代码示例。你打开一个 php 块,我们首先看到的是一个 closure 大括号?这在我看来很不对劲。老实说,我真的很希望,当我刚开始使用 php 时(那是前一段时间),我根本没有理会 echo,只是使用了一些非常简单的模板引擎,比如前面提到的 smarty。这是一个非常小的步骤,但是,迈出这一步,您立即开始编写无限好(在可读性和可维护性方面)的代码。
            • 是的,我开始了解它,我认为它是如何让事情变得更清晰的,我在我的问题中真正要问的不是分离,而是模式(是否突破 PHP)所以我会问一个我认为的新问题。
            【解决方案11】:

            我不知道在 php 中如何,但在 asp.net 中分离有以下优点。 1. 分离代码易于理解和开发 2. 设计师可以在html中工作,同时开发者可以写代码

            【讨论】:

            • 对于第 2 点,如果模型和视图文件是分开的,这将在 php 中工作,否则它只会在每个用户保存文件时覆盖。
            猜你喜欢
            • 1970-01-01
            • 2017-05-14
            • 2014-01-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-07-20
            • 2018-06-08
            相关资源
            最近更新 更多