2013-10-03 69 views
0

我錯過了什麼嗎?或者我誤解了這個概念?爲什麼我的註冊表模式實施不起作用?

從我目前對Registry的設計模式的理解來看,文件test.php應該打印名字「MIH406」,但它沒有!爲什麼?

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

這樣工作嗎?

我想了解註冊表背後的概念,無論它被認爲是好的還是壞的,所以請不要在這裏重新討論關於這種模式有多好或多壞的討論,謝謝。

注:

的index.php

<?php 
require_once "registry.php"; 

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

test.php的

<?php 
require_once "registry.php"; 

echo Registry::getInstance()->get("name"); 
?> 
:我在我的電腦與Ubuntu和LAMP

這是我簡單的實現下測試它

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

回答

1

因爲您沒有爲內部變量設置一個值。

set()$this->registry[$key] = $value;意味着你必須有財產$註冊表,但你有private $_registry = array();。所以,也許這是一個錯字,但$註冊表!= $ _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

+0

那不是我的問題。我認爲還有另一個問題,或者我誤解了這個概念? – malhobayyeb

+0

它適用於我,如果它在一個文件中,更改後的代碼。單獨運行第一個index.php,然後test.php將不起作用,它不在同一個會話中。你只需要運行test.php,它應該包含index.php –

+0

這是我關心的問題,我必須在同一個會話中使用它嗎?!從你的回答,是的,我必須! – malhobayyeb