在钩子调用之间传递PHP Singleton中的数据

时间:2012-12-20 15:57:35

标签: php drupal-7

我创建了一个简单的Drupal模块,它使用单例设计模式来保存钩子调用之间的数据。但是,这似乎并没有像我希望的那样保存数据。

此外,这似乎是一个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();
}

错误消息是

  

注意:未定义的变量:TempStore中的_fileName-> getFileName()

由于这发生在同一个函数调用中,我相信这是对我理解PHP如何处理这类事情并且与Drupal没有真正关系的失败。

有人能看出出了什么问题吗?

3 个答案:

答案 0 :(得分: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; }

答案 1 :(得分:2)

您应该使用$this关键字引用您的字段:

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

当然,在制定者中:

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

答案 2 :(得分:1)

您需要$_fileName访问$this->_fileName。与您的问题无关,但您应该在函数外部使用方法的类中将静态$data对象声明为private static $data - 然后在测试时将该变量称为self::$data它,设置它,并返回它。