2012-02-03 14 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

「解析済み」という概念が何を意味するのかは不明です。 - メソッドが値を返すか、プロパティを設定する必要があるかどうか不明な場合は、2つのメソッドにします。 1つは機能性、もう1つはオプションでプロパティーを上書きします。 – mario

+0

私はいつも関数に値を渡すことは解析であると考えていたことは明らかでした。変数を宣言してリセットしないので、2つのメソッドを作成するとこの問題はソートされません。 –

+0

実際の例は間違いありません。あなたが間違った問題に対する正しい解決策を探しているように思えます。 – mario

答えて

1

これを達成するにはいくつかの方法がありますが、同じボトルに瓶詰めしてください。クラス内の変数をリセットする各メソッドの後に関数を呼び出します。これを行う最も良い方法は、データが返される前に各メソッドの最後にあることです。

関連する問題