PHP为网页中的变量设置变量

时间:2012-06-17 15:33:19

标签: php

我在this tutorial之后使用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>

但是“默认”总是为标题回应。

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

2 个答案:

答案 0 :(得分: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();

获取元数据类的对象。

See it work

答案 1 :(得分:1)

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

  • 您将类定义和html输出分成两个不同的文件。元数据类应该是单独的,不依赖于如何调用变量。
  • 您将HTML输出封装到类的方法中,并在需要时调用此方法。元数据类可以是单例,但在这种情况下不是必需的。