2012-12-20 3 views
4

싱글 토크 디자인 패턴을 사용하여 후크 호출간에 데이터를 보존하는 간단한 Drupal 모듈을 만들었습니다. 그러나 이것은 내가 바라는대로 데이터를 저장하지 않는 것처럼 보입니다.후크 호출 사이에 PHP 싱글 톤으로 데이터 전달하기

또한 이것은 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(); 
} 

오류 메시지가

공지 사항입니다 : 정의되지 않은 변수 : _fileName TempStore-에>려면 getFilename()

이 같은 함수 호출에 발생하기 때문에, 나는 이것이 믿는다 PHP가 이런 종류의 일을 어떻게 처리하고 실제로 Drupal과 관련이 없는지에 대한 나의 이해가 실패했습니다.

누군가가 잘못된 것을 볼 수 있습니까?

public function getFileName() { return $_fileName; } 
public function setFileName($fileName) { $_fileName = $fileName; } 

가되어야한다 :

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

그리고 세터에서뿐만 아니라의 :

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

답변

5

이 C++ 아니다 코스 :

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

당신은 $this 키워드로 필드를 참조해야

1

$_fileName$this->_fileName으로 액세스해야합니다. 질문과 관련이 없지만 함수 외부에서 메서드가 사용되는 클래스에서 $data 정적 객체를 private static $data으로 선언해야합니다. 그런 다음 변수를 테스트하고 설정 한 다음 반환 할 때 self::$data이라는 변수를 참조해야합니다.

+0

추가 세부 정보를 제공해 주셔서 감사합니다. 나는'자기 '액세서에 대해 몰랐다. – Kirk

+1

문제가 없습니다. 여기에 대한 자세한 정보가 있습니다 : http://stackoverflow.com/questions/151969/php-self-vs-this – anjunatl

관련 문제