Frank
Frank

Reputation: 37

Reset Class Instance Variables via Method

Does anyone know how to reset the instance variables via a class method. Something like this:

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();

I know I could simply do $test2 = new SomeClass() BUT I am particularly looking for a way to reset the instance (and its variables) via a method.

Is that possible at all???

Upvotes: 3

Views: 5345

Answers (4)

Sampson
Sampson

Reputation: 268344

Sure, the method itself could assign explicit values to the properties.

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

$this->SetInitialState() from Constructor

Just as another idea, you could have a method that sets the default values itself, and is called from within the constructor. You could then call it at any point later as well.

<?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

?>

Upvotes: -1

Victor Nicollet
Victor Nicollet

Reputation: 24577

You can use reflection to achieve this, for instance using get_class_vars:

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

This is not entirely robust, it breaks on non-public variables (which get_class_vars does not read) and it will not touch base class variables.

Upvotes: 8

streetparade
streetparade

Reputation: 32888

this could be easy done;

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

Upvotes: -1

Rob Lund
Rob Lund

Reputation: 603

Yes, you could write reset() like:

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

You want to be careful because calling new someClass() will get you an entirely new instance of the class completely unrelated to the original.

Upvotes: -1

Related Questions