【问题标题】:Templating HTML using PHP使用 PHP 模板化 HTML
【发布时间】:2012-11-05 14:00:56
【问题描述】:

我正在尝试找出在我的网络应用程序中经常重复的克隆/模板 HTML 的最佳方法。例如,我有一个投票<form>(见下文)需要位于多个页面上。

我想到了两种方法:

  1. 函数调用,例如voteForm($action, $user_id, $formType, $success);
  2. include 声明,例如,include '/myApp/views/voteForm.php'

我更喜欢 include 声明 b/c:

  1. 然后我不必决定函数的参数,这些参数可能会随着时间的推移而改变,从而迫使我在我的应用程序中存在的任何地方重写函数调用。使用include 语句,我可以在放置included php 文件的任何位置使用变量(避免重新声明它们,因为通常有很多变量,这很痛苦)。
  2. 我可以在 HTML 中编写 HTML,而不是作为我必须处理转义字符/json_encode 问题的 PHP 字符串。

出于任何原因(例如性能),我是否应该重新考虑使用include 而不是function()?还有其他我没有想到的模板解决方案吗?

    <form action="<?=$action?>" method='post' data-form-data='{'formType': '<?=$formType?>', 'success': '<?=$success?>'} >`
    <input type='hidden' value='<?=$user_id?>' name='user_id'>
    <input type='radio' value='1' name='vote'>
    <input type='radio' value='-1' name='vote'>
    </form>

【问题讨论】:

    标签: php html function templates include


    【解决方案1】:

    这完全取决于您——您可以混合一个 function 为您调用 include(设置包含文件可能需要用于显示目的的任何必要变量)。例如

    function createForm($action,$foo,$bar){
      $form_action = $action;
      $form_foo = $foo;
      include('templates/form.inc');
    }
    

    就性能而言,据我所知并没有什么巨大的好处。尽管如果您正在寻找更好的模板方法,您可能需要查看smarty 或其他可以为您处理大部分“艰巨工作”的系统。

    请记住,当您的代码输出 HTML 时,您不再需要关注点分离。也就是说,如果您决定在以后更改网站的外观和感觉,您不会只查看 .inc(或您使用的任何扩展名)文件,而是现在查看 .inc .php 文件以应用更改。

    【讨论】:

      【解决方案2】:

      我会尽量避免将 HTML 放入函数调用中。我认为您在这里尝试实现的目标最适合包含声明 - 基于个人喜好。

      至于性能 - 很难说,但您可以使用像 XDebug 这样的 PHP Profiler 来查看函数或包含是否最有效。

      http://xdebug.org/docs/profiler

      【讨论】:

      • 您说应该“避免将 HTML 放入函数调用”的理由是什么?
      • 我认为这是个人喜好 - 我认为 HTML 应该保留在主页/视图本身中,而不是弄乱你的功能。
      【解决方案3】:

      对于生成的大块 HTML,我建议使用包含。我更喜欢使用函数调用来获取特定的数据位。

      再次,这是个人喜好,不能用真正“正确”的答案来回答。

      就性能而言,我猜根本没有太大区别,除非您一次调用数千次。

      希望对您有所帮助。

      【讨论】:

      • “每个都有数千个调用”是指数千个function() 调用还是数千个includes?你知道哪个性能更好吗?
      • 我没有做过任何测试,但实际上,它并不值得测试。差异会非常小。就像一瞬间;甚至可能不是。首先构建它,然后在它给您带来问题时进行优化。在构建应用之前进行优化通常不是一个好主意。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 2010-12-16
      • 1970-01-01
      • 2019-02-28
      • 2011-09-19
      • 1970-01-01
      • 2013-09-16
      相关资源
      最近更新 更多