有没有人知道如何通过类方法重置实例变量。像这样:
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()但是我特别想找到一种通过方法重置实例(及其变量)的方法。
这可能吗???
答案 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;
}
正如另一个想法,你可以有一个方法来设置默认值本身,并从构造函数中调用。然后您可以在以后随时调用它。
<?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);
}