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 に答える