我无法在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. */
?>
这基本上是一种非常冗长的方式,询问是否可以将类变量重置为默认值,同时忽略已被解析为被调用方法的那些
答案 0 :(得分:1)
有几种方法可以实现这一目标,但他们都采用相同的解决方案。在每个重置类中变量的方法之后调用函数。最好的方法是在返回数据之前在每个方法的末尾。