2

我一直在按照本教程使用 php 和 html 制作网页。我试图设置一个模板,我可以在其中设置各种变量,如页面标题、内容等。但我在正确设置内容时遇到了一些麻烦。

在我的索引页面中,我的 php 开始如下:

<!DOCTYPE html>
<?php 
include('includes/meta.php');
$md = new metadata();
$md->setTitle("HELLOOOO");
?> 
...<!-- rest of html -->

然后在 meta.php 中的 Metadata 类中(包含 HTML):

<?php

class metadata
{
    private $title = "default";
    public function setTitle($title) { $this->title = $title; }
    public function getTitle() { return $this->title; }


}
 ?>
<head>
    <meta charset="utf-8">
    <title>
         <?php $md = new metadata();
             echo $md->getTitle();?>
    </title>

但是标题总是回显“默认”。

如何在单独的类/文件中正确设置变量?实现这一目标的最佳惯例是什么?

4

2 回答 2

2

您需要一个单例,因为当您这样做时new metadata();,您正在创建一个新对象,而实际上您希望该对象引用第一个创建的对象。

这是一个示例实现:

class metadata
{
    private $title = "default";
    private function __construct() {} // Private constructor

    private static $instance = null;
    public static function getInstance() {
       if( self::$instance == null) { 
           self::$instance = new metadata();
       }
       return self::$instance;
    }
    public function setTitle($title) { $this->title = $title; }
    public function getTitle() { return $this->title; }
}

现在,您需要执行以下操作:

$md = metadata::getInstance();

获取元数据类的对象。

看它工作

于 2012-06-17T15:36:34.960 回答
1

单例是不够的,因为声明类的文件还包含要输出的 HTML。所以有两个解决方案:

  • 您将类定义和 html 输出拆分为两个不同的文件。元数据类应该是一个单例,不依赖于你如何调用变量。
  • 您将 HTML 输出封装到类的方法中,并在需要时调用此方法。元数据类可以是一个单例,但在这种情况下这不是强制性的。
  • 于 2012-06-17T15:44:16.097 回答