2012-02-03 2 views
2

Stackoverflow에서 비슷한 질문을 찾을 수 없습니다.현재 인스턴스를 다시 설정하지 않고 클래스 변수를 재설정하는 방법

페이지 당 여러 번 호출 될 수있는 메소드가있는 클래스가 있습니다. 메서드가 호출 될 때마다 공개 변수가 기본값으로 재설정되는지 확인해야합니다. UNLESS 메소드를 호출하기 전에 설정되어 있습니다.

은 값이 설정되어 또는 정지

내가 이것을 달성하는 방법을 생각할 수있는 마지막 메소드 호출에서 설정되어 있는지 여부를 알 수있는 방법이 없기 때문에 조건의 경우 간단한을 사용하여 달성 될 수 없다 (모든 기본값을 설정하는) __construct 메서드를 호출 할 수 없기 때문에 구문 분석 된 값을 덮어 쓰게됩니다. 그러나 마지막 메소드 호출의 값이 파싱되지 않도록 재설정해야합니다.

확실한 대답은 공용 변수와 반환 변수에 다른 이름을 지정하는 것입니다. 다른 옵션이 없으면이 작업을 수행합니다. 그러나 변수의 수를 최소로 유지하려고합니다.

설명하기가 어렵 기 때문에이 질문을 예제로 업데이트 할 것입니다. 암호.

UPDATE

문제가 발생할 수있는 경우의 예 :

<?php 

class test{ 
    public $return_array; 
    public $return_string; 
    public $return_bool; 

    function __construct(){ 

     // Set the default values 
     $this->return_array = false; 
     $this->return_string = false; 
     $this->return_bool = false; 

    } 

    public function method(){ 
     // ... do something 
     $array = array('test'); 
     $string = 'test'; 
     $bool = true; 

     // Only return variables if asked to 
     $this->return_array = $this->return_array ? $array : NULL; 
     $this->return_string = $this->return_string ? $string : NULL; 
     $this->return_bool = $this->return_bool ? $bool : NULL; 
     return; 
    } 
} 

// Initiate the class 
$test = new test; 

// Call the method the first time with one parameter set 
$test->return_array = true; 
$test->method(); 

// Print the result 
print_r($test->return_array); 

// MOST OBVIOUS ANSWER WOULD BE TO RESET VARIABLES HERE LIKE SO 
$test->reset(); // HOWEVER, I DO NOT WANT TO HAVE TO CALL THIS EACH TIME I CALL THE METHOD, HERE LIES MY PROBLEM! 

// Call the method again with different parameters 
$test->return_string = true; 
$test->return_bool = true; 
$test->method(); 

// Print the result 
echo $test->return_array; 
echo $test->return_bool; 

/* The problem lies in the second call of the method because $test->return_array has not been reset to its default value. However, there is no way to reset it without affecting the other variables. */ 

?> 

이 그것을 기본으로 클래스 변수를 재설정 할 수 있는지 여부를 묻는 매우 긴 호흡 방법은 기본적으로 값은 호출되는 메소드에 대해 구문 분석 된 값을 무시하는 동안

+0

"파싱 된"개념이 무엇을 의미하는지 명확하지 않습니다. 그리고 메소드가 값을 반환하거나 속성을 설정해야하는 경우 모호한 경우 두 가지 방법으로 만듭니다. 하나는 기능에 대한 것이고 다른 하나는 선택적으로 속성을 덮어 씁니다. – mario

+0

필자는 항상 함수에 값을 전달하는 것이 파싱으로 알려져 있다고 생각했습니다. 분명히 아닙니다. 두 가지 방법을 사용하면 변수가 선언되고 재설정되지 않기 때문에이 문제를 분류하지 않습니다. –

+0

실제로 예제를 제공해야합니다. 잘못된 문제에 대한 올바른 해결책을 찾는 것처럼 들리 네요. – mario

답변

1

이것을 달성하는 데는 여러 가지 방법이 있지만 병을 같은 솔루션으로 보냅니다. 클래스 내의 변수를 재설정하는 각 메소드 다음에 함수를 호출합니다. 이렇게하는 가장 좋은 방법은 데이터가 반환되기 전에 각 메서드가 끝났을 때입니다.

관련 문제