【问题标题】:Passing data in PHP Singleton between hook calls在钩子调用之间传递 PHP Singleton 中的数据
【发布时间】:2012-12-20 15:57:34
【问题描述】:

我创建了一个简单的 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 没有真正的关系。

有人能看出哪里不对吗?

【问题讨论】:

    标签: php drupal-7


    【解决方案1】:

    这不是 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; }
      

      当然,在 setter 中也是如此:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-26
        • 1970-01-01
        • 2021-09-06
        相关资源
        最近更新 更多