0

我错过了什么吗?还是我误解了这个概念?

根据我目前对 Registry 设计模式的理解,文件 test.php 应该打印名称“MIH406”,但它没有!为什么?

首先我访问了 index.php 页面,然后我访问了 test.php 页面。

它是这样工作的吗?

我想了解 Registry 背后的概念,无论它被认为是好是坏,所以请不要在这里重新讨论这种模式的好坏,谢谢。

注意:我正在使用 Ubuntu 和 LAMP 在我的电脑下对其进行测试

这是我的简单实现:

索引.php

<?php
require_once "registry.php";

Registry::getInstance()->set("name", "MIH1406");
?>

测试.php

<?php
require_once "registry.php";

echo Registry::getInstance()->get("name");
?>

注册表.php

<?php
class Registry
{
    private static $_instance = null;
    private $_registry = array();

    public static function getInstance()
    {
        if(self::$_instance == null)
        {
            self::$_instance = new Registry();
        }
        return self::$_instance;
    }

    public function set($key, $value)
    {
        $this->_registry[$key] = $value;
    }

    public function get($key, $default = null)
    {
        if(!isset($this->_registry[$key]))
        {
            return $default;
        }

        return $this->_registry[$key];
    }

    private function __construct()
    {
    }

    private function __clone()
    {
    }
}
?>
4

1 回答 1

1

因为您没有为内部变量设置值。

拥有set(): $this->registry[$key] = $value;意味着您必须拥有财产 $registry,但您拥有private $_registry = array();. 所以,也许这是一个错字,但是 $registry != $_registry


使用您编辑的代码,这对我有用。您需要独立地包含文件。

索引.php:

<?php
include 'registry.php';
Registry::getInstance()->set("name", "MIH1406");
?>

测试.php

<?php
include 'index.php';
echo Registry::getInstance()->get("name");
?>

然后运行test.php输出:MIH1406

于 2013-10-03T06:29:10.123 回答