【问题标题】:How to reset class variables without reseting the current instance ones如何在不重置当前实例的情况下重置类变量
【发布时间】:2012-02-03 02:16:36
【问题描述】:

我在 Stackoverflow 上找不到类似的问题,但我确信之前可能有人问过这个问题。

我有一个类,其中的方法每页可能会被调用多次。每次调用该方法时,我都需要确保将公共变量重置为其默认值,除非它们已在调用该方法之前设置。

这不能使用简单的 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. */

?>

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

【问题讨论】:

  • 不清楚您的“已解析”概念是什么意思。 -- 如果一个方法是否应该返回值或设置属性是模棱两可的,那么让它成为两个方法。一个用于功能,另一个用于覆盖属性。
  • 我一直认为将值传递给函数称为解析,显然不是。将其设为两种方法不会解决此问题,因为变量仍将被声明且不会重置
  • 你绝对应该举一个真实的例子。听起来您正在为错误的问题寻找正确的解决方案。
  • 我还没有写出真实的例子。我可以描述这一点的最好方法是使用我编写的代码。同一个方法被调用两次,不同的变量传递给它。但是,在第二次调用该方法时,初始 $test->return_array 仍然是从前一个设置的。这需要在不重置新声明的变量的情况下重置。在一分钟内查看我对代码部分的编辑
  • 这可能是另一个愚蠢的问题:但你为什么不使用-&gt;method($parameters,...) 呢?似乎该设置应该只应用一次。或者为什么不让该方法一次返回所有三个结果?

标签: php class methods


【解决方案1】:

有几种方法可以实现这一点,但它们都归结为相同的解决方案。在重置类中的变量的每个方法之后调用一个函数。最好的方法是在返回数据之前每个方法结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多