按照本教程,我一直在用php和html制作一个网页。我正在尝试设置一个模板,我可以在其中设置各种变量,例如页面标题、内容等。但是我在正确设置方面遇到了一些麻烦。
在我的索引页面中,我让 php 开始如下:
<!DOCTYPE html>
<?php
include('includes/meta.php');
$md = new metadata();
$md->setTitle("HELLOOOO");
?>
...<!-- rest of html -->
然后在我的元元数据类中.php(包含 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>
但是标题总是回响"默认"。
如何在单独的类/文件中正确设置变量?实现这一目标的最佳惯例是什么?
你需要
一个单例,因为当你执行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();
获取元数据类的对象。
看它工作
单例是不够的,因为声明类的文件还包含要输出的 HTML。所以有两个解决方案: