如何重置类变量而不重置当前实例变量

时间:2012-02-03 02:16:37

标签: php class methods

我无法在Stackoverflow上找到类似的问题,但我确信有人可能会在此之前提出这个问题。

我有一个类,每个页面可以多次调用方法。每次调用该方法时,我都需要确保将公共变量重置为默认值, UNLESS 在调用方法之前已经设置了它们。

使用简单的if条件无法实现这一点,因为无法判断该值是已设置还是仍在上一次方法调用中设置

我无法想到实现此目的的方法,因为我无法调用我的__construct方法(设置所有默认值),因为这会覆盖已解析的值。但是,我需要重置它们以防止解析最后一个方法调用的值。

显而易见的答案是为公共变量和返回变量指定不同的名称。如果没有其他选择,我会这样做,但我希望将变量数量保持在最低

很难以书面形式解释这一点,因此我将以代码中的含义为例更新此问题。

更新

可能出现问题的示例:

<?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. */

?>

这基本上是一种非常冗长的方式,询问是否可以将类变量重置为默认值,同时忽略已被解析为被调用方法的那些

1 个答案:

答案 0 :(得分:1)

有几种方法可以实现这一目标,但他们都采用相同的解决方案。在每个重置类中变量的方法之后调用函数。最好的方法是在返回数据之前在每个方法的末尾。