我在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>
但是“默认”总是为标题回应。
如何在单独的类/文件中正确设置变量?实现这一目标的最佳惯例是什么?
答案 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();
获取元数据类的对象。
答案 1 :(得分:1)
单例是不够的,因为声明该类的文件还包含要输出的HTML。 两个解决方案: