4

我创建了一个简单的 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->getFileName() 中的_fileName

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

有人能看出什么问题吗?

4

3 回答 3

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; }
于 2012-12-20T16:06:31.000 回答
2

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

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

当然,在二传手中:

public function setFileName($fileName) { $this->_fileName = $fileName; }
于 2012-12-20T16:07:01.193 回答
1

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

于 2012-12-20T16:12:05.033 回答