我是这样管理我的网站内容的:
PageLoader.class
class PageLoader {
private $page_dir;
private $page_headers = '';
private $page_html = '';
public function __construct($page_dir)
{
$this->page_dir = $page_dir;
}
public function load()
{
$file_found = false;
ob_start();
$file_found = include("./{$this->page_dir}");
$file_contents = ob_get_contents();
ob_end_clean();
if($file_found != false)
{
$this->page_html = $file_contents;
}
}
public function outputBody()
{
echo $this->page_html;
}
}
index . php
$connection = mysql_connect(....);
$is_user_logged = login(...);
$view = new PageLoader($_GET['page']);
$view->load();
?>
<html>
<head>
<? $view->outputHeaders(); ?>
</head>
<body>
<? $view->outputBody(); ?>
</body>
</html>
有一个问题:
$connection和$is_user_logged_in这两个变量不能在load()方法中访问。由于各种原因,我的大多数内页都依赖于这些变量。由于它们在该作用域中都显示为NULL,因此内页无法正常工作。
这可以解决问题:$view->setVariable("connection", $connection),但我有很多超过2个'主'变量,所以我不确定这是否是最好的方式…
我能做什么?请随意建议任何其他方法来管理我的内容,因为我的方法可能是最不专业的…
对您的问题的直接回答是:导入全局变量。在php中,全局变量必须显式地"导入"。这是通过全局关键字:
完成的。$gvar = "asdfad";
function myfunction()
{
global $gvar;
echo $gvar;
}
然而这似乎不是最好的主意,因为这意味着你的类不是一个逻辑上独立的单元。
您可能应该在类中声明属性(保存所需的数据),并在一些外部初始化(如构造函数)时设置。