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


PHP setting variables for variables in a webpage

按照本教程,我一直在用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。所以有两个解决方案:

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