0

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

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

Printhtml();

而不是这个:

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

  return $html;
}

echo GetHtml();

为了减少内存使用?我计划用 Print / Get 功能做整个系统,那么你会走哪条路?

4

3 回答 3

1

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

Echo在函数中添加东西是非常糟糕的行为,因为您强迫自己和其他使用系统的人直接使用该函数,而不是能够运行该函数并对其返回的数据执行某些操作。

echo在第一种情况下,这意味着必须进行缓冲,并且从函数内部 ing 而不是从长远来看(即测试等)正确返回数据会带来更多麻烦。选择第二个选项。但是我真的不知道你在函数中究竟在做什么,因为你通常不想在某个函数中“构建”HTML。这就是模板的用途。

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

于 2013-09-14T14:07:21.700 回答
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>

我希望这对您有所帮助。

于 2013-09-14T20:11:02.257 回答
0

正如 Jeffman 已经说过的,我认为使用第二种方法更好。使用第二种方法,您还可以选择准备它,例如替换一些标签或您想要的任何东西。您可以更好地控制输出。

于 2013-09-14T14:04:19.860 回答