通过Method重置类实例变量

时间:2009-12-21 22:05:27

标签: php

有没有人知道如何通过类方法重置实例变量。像这样:

class someClass 
{
    var $var1 = '';
    var $var2 = TRUE;

    function someMethod() 
    { 
        [...]
        // this method will alter the class variables
    }

    function reset()
    {
        // is it possible to reset all class variables from here?
    }
}

$test = new someClass();
$test->someMethod();
echo $test->var1;

$test->reset();
$test->someMethod();

我知道我可以简单地执行$ test2 = new SomeClass()但是我特别想找到一种通过方法重置实例(及其变量)的方法。

这可能吗???

4 个答案:

答案 0 :(得分:6)

您可以使用反射来实现此目的,例如使用get_class_vars

foreach (get_class_vars(get_class($this)) as $name => $default) 
  $this -> $name = $default;

这不是完全健壮的,它打破了非公共变量(get_class_vars没有读取)并且它不会触及基类变量。

答案 1 :(得分:-1)

当然,方法本身可以为属性分配显式值。

public function reset()
{
  $this->someString  = "original";
  $this->someInteger = 0;
}

$ this->来自构造函数

的SetInitialState()

正如另一个想法,你可以有一个方法来设置默认值本身,并从构造函数中调用。然后您可以在以后随时调用它。

<?php

  class MyClass {
    private $var;
    function __construct()     { $this->setInitialState(); }
    function setInitialState() { $this->var = "Hello World"; }
    function changeVar($val)   { $this->var = $val; }
    function showVar()         { print $this->var; }
  }

  $myObj = new MyClass();
  $myObj->showVar(); // Show default value
  $myObj->changeVar("New Value"); // Changes value
  $myObj->showVar(); // Shows new value
  $myObj->setInitialState(); // Restores default value
  $myObj->showVar(); // Shows restored value

?>

答案 2 :(得分:-1)

是的,你可以写一下reset(),如:

function reset()
{
    $this->var1 = array();
    $this->var2 = TRUE;
}

你要小心,因为调用new someClass()会得到一个完全与原始类无关的类的全新实例。

答案 3 :(得分:-1)

这可以轻松完成;

public function reset()
{
    unset($this);
}