2012-12-20 44 views
4

我創建了一個簡單的Drupal模塊,它使用單例設計模式來保持鉤子調用之間的數據。但是,這似乎並沒有像我希望的那樣保存數據。在鉤子調用之間通過PHP Singleton傳遞數據

此外,這似乎是一個PHP的理解問題,而不是Drupal,但如果有人有一個Drupal提示,這就是我正在做的。

的單設置

class TempStore { 
    private $_fileName; 
    public function getFileName() { return $_fileName; } 
    public function setFileName($fileName) { $_fileName = $fileName; } 

    function __construct() { 

    } 
} 

function MYMODULE_data() { 
    static $data; 

    if (!isset($data)) 
    $data = new TempStore(); 

    return $data; 
} 

麻煩的是,即使在同樣的功能可見。

function MYMODULE_file_insert($file) { 
    $token = $file->timestamp; 
    MYMODULE_data()->setFileName($token); 

    // error message: Notice: Undefined variable: _fileName in TempStore->getFileName() 
    $checkVal = MYMODULE_data()->getFileName(); 
} 

該錯誤消息是

說明:未定義變量:_filename在TempStore->的getFileName()

由於這發生在相同的函數調用,相信這是一個在我理解PHP如何處理這類事情並且與Drupal沒有真正關聯方面失敗。

有人可以看到什麼是錯的?

回答

5

這不是C++:

public function getFileName() { return $_fileName; } 
public function setFileName($fileName) { $_fileName = $fileName; } 

應該是:

public function getFileName() { return $this->_fileName; } 
public function setFileName($fileName) { $this->_fileName = $fileName; } 
2

你應該參考你的領域與$this關鍵字:

public function getFileName() { return $this->_fileName; } 

而且還有在二傳手當然:

public function setFileName($fileName) { $this->_fileName = $fileName; } 
1

您需要訪問$_fileName$this->_fileName。與您的問題無關,但您應該在該函數之外聲明您的靜態$data對象爲private static $data該方法所用的類 - 然後在測試它時設置該變量並將其返回,然後將該變量稱爲self::$data

+0

感謝您的補充細節。我不知道「自我」訪問者。 – Kirk

+1

沒有問題。以下是關於它的更多信息:http://stackoverflow.com/questions/151969/php-self-vs-this – anjunatl