你认为我应该使用这种方法吗:
function PrintHtml() {
echo "Hello World!";
}
Printhtml();
而不是这个:
function GetHtml() {
$html = "Hello ";
$html .= "World!";
return $html;
}
echo GetHtml();
为了减少内存使用?我计划用 Print / Get 功能做整个系统,那么你会走哪条路?
你认为我应该使用这种方法吗:
function PrintHtml() {
echo "Hello World!";
}
Printhtml();
而不是这个:
function GetHtml() {
$html = "Hello ";
$html .= "World!";
return $html;
}
echo GetHtml();
为了减少内存使用?我计划用 Print / Get 功能做整个系统,那么你会走哪条路?
这不应该也不是关于内存占用/性能。
Echo
在函数中添加东西是非常糟糕的行为,因为您强迫自己和其他使用系统的人直接使用该函数,而不是能够运行该函数并对其返回的数据执行某些操作。
echo
在第一种情况下,这意味着必须进行缓冲,并且从函数内部 ing 而不是从长远来看(即测试等)正确返回数据会带来更多麻烦。选择第二个选项。但是我真的不知道你在函数中究竟在做什么,因为你通常不想在某个函数中“构建”HTML。这就是模板的用途。
另请注意,函数不以大写字母开头是一种常见约定。
我会创建一个加载你的模板文件的类。在我的示例中,我创建了一个名为 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>
我希望这对您有所帮助。
正如 Jeffman 已经说过的,我认为使用第二种方法更好。使用第二种方法,您还可以选择准备它,例如替换一些标签或您想要的任何东西。您可以更好地控制输出。