我创建了一个简单的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没有真正关系的失败。
有人能看出出了什么问题吗?
答案 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
它,设置它,并返回它。