PHP中的GetHtml vs PrintHtml?

时间:2013-09-14 13:47:37

标签: php memory-management printing get

你认为我应该使用这种方法:

function PrintHtml() {
  echo "Hello World!";
}

Printhtml();

而不是:

function GetHtml() {
  $html = "Hello ";
  $html .= "World!";

  return $html;
}

echo GetHtml();

为了减少内存使用量?我打算用打印/获取功能来完成整个系统,你会选择哪条路线?

3 个答案:

答案 0 :(得分:1)

这不应该也不是内存占用/性能。

函数内部的{p> Echo是非常糟糕的行为,因为你强迫自己和其他人使用系统直接使用函数而不是能够运行函数并对它返回的数据做一些事情。

在第一种情况下,这将意味着必须缓冲,并且在函数内部echo更加麻烦,而不是长期正确地返回数据(即测试等)。转到第二个选项。但是我真的不知道你在函数中究竟在做什么,因为你经常不想在某些函数中“构建”HTML。这就是模板的用途。

另请注意,函数不以大写字母开头是一种常见的约定。

答案 1 :(得分:0)

正如杰夫曼所说,我认为最好使用第二种方法。使用第二种方法,您还可以选择准备它,例如替换某些标签或任何您想要的标签。您可以更好地控制输出。

答案 2 :(得分:0)

我会创建一个加载模板文件的类。在我的例子中,我创建了一个名为index.php的文件,该文件存储在“templates”>文件夹中。 “MyTemplate的”。您可以使用以下课程。

<?php
    // defines
    define('DS', DIRECTORY_SEPARATOR);
    define('_root', dirname(__FILE__));

    // template class
    class template
    {
        var templateName;
        var templateDir;

        function __construct($template)
        {
            $this->templateName = $template;
            $this->templateDir = _root.DS.'templates'.DS.$this->templateName;
        }

        function loadTemplate()
        {
            // load template if it exists
            if(is_dir($this->templateDir) && file_exists())
            {
                // we save the output in the buffer, so that we can handle the output
                ob_start();

                include_once($file);

                // save output
                $output = ob_get_contents();

                // clear buffer
                ob_end_clean();

                // return output
                return $output;
            }
            else
            {
                // the output when the template does not exists or the index.php is missing
                return 'The template "'.$this->templateName.'" does not exists or the "index.php" is missing.';
            }
        }
    }
?>

它只是一个基本类,只加载模板。现在你可以像这样调用这个类:

<?php
    // example for using the class
    include_once('class.template.php');
    $template = new template('myTemplate');
    $html = $template->loadTemplate();

    echo $html;
?>

在index.php中,您现在可以编写像这样的html内容。

<!DOCTYPE html>
<html lang="en-GB">
<head>
    <title>My Template</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
    <p>
        My Content
    </p>
</body>
</html>

我希望这对你有所帮助。