返回函数中更好的HTML


Better HTML within a returning function?

我可以在字符串中编写HTML代码并返回它,但它看起来总是有点乱。有什么更好的解决方案吗?

示例1-换行HTML

用HTML为每一行添加新行。一种非常混乱的HTML代码编写方式。

function my_function()
{
    $html = '<div class="hello">';
    $html .= 'A very long text';
    $html .= '</div>';
    return $html;
}

示例2-HTML块

编写HTML代码仍然是一种混乱的方式。另一个缺点是更难写出"引用"字符。

function my_function()
{
    $html = '
        <div class="hello">
            A very long text
        </div>';
    return $html;
}

示例3-ob_get_contents

我可以使用ob_get_contents。它将我的PHP与HTML分离开来,很好!但我读到这是糟糕的表现。

function my_function()
{
    ob_start();
    ?>
        <div class="hello">
            A very long text
        </div>';
    <?php
    $html = ob_get_contents();
    ob_end_clean();
    return $html;
}

问题

有没有其他方法可以很好地将HTML与PHP隔离开来?

您可以使用一种模板形式,其中HTML结构存储在带有占位符值的模板文件中,您可以在其中读取占位符值,然后用实际内容替换占位符值。

这样,您只需读取一个字符串,执行一系列"替换"来进行转换,然后返回结果。

是和否,

这3个例子中的任何一个都远远没有达到"让php远离html"的目标。在这里面,他们不会比其他人学得更好。

保持表示层与逻辑的连接被认为不是一种好的做法
对于初学者来说,这两种解决方案都不是我们可以直接称之为的。对于较短的学习曲线,最简单的方法就是使用模板引擎,比如smarty。

http://www.smarty.net/

这将帮助您使演示文稿与代码保持一定的距离。

但通常接受的策略是MVC将软件分为3层。模型视图和控制器。本文简单地解释了什么是以php为中心的mvc。

http://onlamp.com/pub/a/php/2005/09/15/mvc_intro.HTML

许多人认为还有其他架构和实践更好,但我相信这是最基本的。

"有没有其他方法可以很好地将HTML与PHP隔离开来?"

  • 是的-你应该阅读MVC以及如何在PHP中实现它(例如使用Smarty)

将两者分开的简单想法:

//php function
    function stuff(){
          $arr = array();
          $arr['text'] =  'A very long text';
          $arr['class']  = 'hello';

        return $arr;
        }

HTML页面:

<html>
<?php $thing = stuff(); ?>

<div class="<?php echo $thing['class']; ?>">
<?php echo $thing['text']; ?>
</div>
</html>