簡體   English   中英

為什么我的注冊表模式實施不起作用?

[英]Why my Registry pattern implementation not working?

我想念什么嗎? 還是我誤解了這個概念?

根據我對注冊表設計模式的當前了解,文件test.php應該打印名稱“ MIH406”,但事實並非如此! 為什么?

首先,我訪問了index.php頁面,然后訪問了test.php頁面。

這樣工作嗎?

我想了解注冊表背后的概念,無論它被認為是好是壞,因此,無需在此重新討論此模式的優劣。謝謝。

注意:我正在使用Ubuntu和LAMP在我的PC下對其進行測試

這是我的簡單實現:

的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()
    {
    }
}
?>

因為您沒有為內部變量設置值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM