我已经从书中做了一个测试数据库" PHP和mySQL新手到Ninja" ...现在我正在测试通过使用模板输出html来改善结构。这是模板...注意星号中的部分。这是动态内容,应根据传递给它的页面而改变。
<!DOCTYPE html>
<html lang="en">
<head>
<link href= "/project/includes/style.css" rel="stylesheet" type="text/css">
<meta charset="utf-8">
<title>Joke Database Project</title>
</head>
<body>
<div id="topheader">
<p>Joke Database Project</p>
</div>
<div id="navigation">
<?php include $_SERVER['DOCUMENT_ROOT'] .'/project/includes/navbar.html.php'; ?>
</div>
<div id="container">
**<?php include '/'.$content;?>**
</div>
</body>
</html>
我在php脚本中使用以下代码时工作正常:
$content="authors.html.php";
include $_SERVER['DOCUMENT_ROOT'] . '/project/includes/html_template.html.php';
但是我想让它变得不那么笨重所以我决定在我的helpers.inc.php文件中创建以下函数,该文件包含在主php脚本中:
function showpage($content)
{
include $_SERVER['DOCUMENT_ROOT'] . '/project/includes/html_template.html.php';
}
所以我只想使用 showpage(&#34; author.html.php&#34;)来在模板中显示该内容。我遇到的问题是,当我使用此功能时,它不再识别主脚本中的变量。
我怎样才能以优雅的方式解决这个问题?
答案 0 :(得分:0)
关于范围的问题:当你想要从函数中调用一个变量时你应该使用这个代码:
var $myvar ;
function myfunct () {
$GLOBALS['myvar']
}
答案 1 :(得分:0)
您将模板包含在函数范围内,因此无法访问外部变量。您可以创建一个包含showpage()函数的类,并使用魔术方法__set和__get为其分配变量:
class Controller {
private $data = array();
public function __set($name, $value)
{
$this->data[$name] = $value;
}
public function __get($name)
{
if (array_key_exists($name, $this->data))
{
return $this->data[$name];
}
//else handle errors
}
public function showpage($path)
{
include $_SERVER['DOCUMENT_ROOT'] . '/project/includes/' . $path;
}
}
$ctrl = new Controller();
$ctrl->var1 = $var1;
$ctrl->var2 = $var2;
$ctrl->showpage("path/to/page");
然后您可以在模板中使用 $ this-&gt; varName 。
你应该在php中阅读MVC。