我错过了什么吗?或者我误解了这个概念?
从我目前对Registry的设计模式的理解,文件test.php应该打印名称“MIH406”,但它没有!为什么呢?
首先我访问了index.php页面,然后访问了test.php页面。
它是否有效?
我想学习注册表背后的概念,无论它是好还是坏,所以请不要在这里重新讨论这个模式有多好或多坏,谢谢。
注意:我正在使用Ubuntu和LAMP在我的电脑上测试它
这是我的简单实现:
的index.php
<?php
require_once "registry.php";
Registry::getInstance()->set("name", "MIH1406");
?>
test.php的
<?php
require_once "registry.php";
echo Registry::getInstance()->get("name");
?>
registry.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()
{
}
}
?>
答案 0 :(得分:1)
因为您没有为内部变量设置值。
进入set()
:$this->registry[$key] = $value;
意味着您必须拥有属性$ registry,但您拥有private $_registry = array();
。所以,也许这是一个错字,但$ registry!= $ _registry
使用您编辑的代码,这对我有用。您需要依赖包含文件。
的index.php:
<?php
include 'registry.php';
Registry::getInstance()->set("name", "MIH1406");
?>
test.php的
<?php
include 'index.php';
echo Registry::getInstance()->get("name");
?>
然后运行test.php
输出:MIH1406