内容管理 - 全局变量

时间:2011-09-24 18:14:26

标签: php

这是我管理网站内容的方式:

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>

这有一个问题:

无法从load()方法中访问这两个变量$ connection和$ is_user_logged_in。由于各种原因,我的大多数内页依赖于这些变量。由于它们在该范围内都显示为NULL,因此内部页面无法运行。

这可以解决问题:$ view-&gt; setVariable(“connection”,$ connection)但我有超过2个'主'变量,所以我不确定这是不是最好的方法...

我该怎么办?随意建议我管理我的内容的任何其他方式,因为我的方式可能是最不专业的......

1 个答案:

答案 0 :(得分:0)

您问题的直接答案是:导入全局变量。 在php中,全局变量必须明确地“导入”。这是通过全局关键字:

完成的
$gvar = "asdfad";
function myfunction()
{
    global $gvar;
    echo $gvar;
}

然而,这似乎不是最好的主意,因为这意味着您的班级不是一个逻辑独立单位。

您可能应该在类中声明属性(包含所需数据)并在某些外部初始化(如构造函数)中设置。